PDA

View Full Version : جای دقیق مکان نما در TMemo



Hamid_PaK
چهارشنبه 15 تیر 1384, 23:06 عصر
چطوری میشه جای دقیق مکان نما در Memo یا RichEdit به نسبت Desktop رو پیدا کرد ؟؟؟
(یعنی این Point در Width, Height دسکتاپ تعیین بشه ) . . .

vcldeveloper
شنبه 18 تیر 1384, 04:38 صبح
var
pt : TPoint;
begin
pt := ClientToScreen(Memo1.CaretPos);
end;

Hamid_PaK
شنبه 18 تیر 1384, 04:54 صبح
علی آقا جواب نمی ده چون اگه خودتون یه PopUpMenu رو باهاش فعال کنید می بینید که X , Y به نسبت مکان نما فاصله زیادی داره ؟؟؟؟

vcldeveloper
شنبه 18 تیر 1384, 06:12 صبح
یادم نبود...CaretPos شماره سطر و ستون در داخل Memo رو برمی گردونه، نه مختصات مکان نما.
برای تبدیل اون به مختصات صفحه نمایش برای نمایش PopupMenu می تونی از کدی مقل این استفاده کنی:


var
pt : TPoint;
X, Y : integer;
begin
X := Memo1.Left + (Memo1.CaretPos.X + 1) * Memo1.Font.Size;
Y := Memo1.Top + (Memo1.CaretPos.Y + 4) * ABS(Memo1.Font.Height);
pt := ClientToScreen(Point(X,Y));
PopUpMenu1.Popup(pt.X,pt.Y);

Hamid_PaK
یک شنبه 19 تیر 1384, 05:04 صبح
علی آقا این تا حدی مشکل رو حل می کنه ولی نه توی تمامی فونتها و نه وقتی که تعداد زیادی خط نوشته شده باشه (اینتر بزنی بیاد پایین) ولی باز هم تشکر می کنم .

جای دقیق رو نیاز دارم . فکر میکنم مشه پیداشت کرد . . .

vcldeveloper
دوشنبه 20 تیر 1384, 02:27 صبح
جای دقیق رو نیاز دارم . فکر میکنم مشه پیداشت کرد . . .


var
CaretPosition : TPoint;
begin
GetCaretPos(CaretPosition);

تابع GetCaretPos مکان اشاره گر در داخل یک کنترل رو بصورت مقادیر پیکسل بر می گردونه.
برای مثال در صورتی که قصد نمایش یک پنجره در زیر کرسر داشته باشید:


var
CaretPosition : TPoint;
begin
GetCaretPos(CaretPosition);
Inc(CaretPosition.X,20);
Inc(CaretPosition.Y,40);
end;

Hamid_PaK
دوشنبه 20 تیر 1384, 21:17 عصر
آقا این درست بود . . .
جالبی این Function اینه که این مکان رو به نسبت اندازه فرم میده !
(برای PopUp کردن یک PopUpMenu نیاز به اضافه کردن Left , Top فرم به X , Y است).

با تشکر فراوان از شما آقای کشاورز .