PDA

View Full Version : نمایش چند فیلد یک رکورد بصورت hint



mehialdst
دوشنبه 14 آذر 1384, 16:44 عصر
با سلام
میخواستم بدونم چطور میشه با حرکت دادن موس در dbgrid چند فیلد خاص از یک رکورد را بصورت hint یا در یک فرم خیلی کوچک نشان داده بشه
من با کلیک کردن روی dbgrid را نوشتم ولی دوست دارم بدون کلیک کردن این کار انجام شود
با تشکر

Naficy
سه شنبه 15 آذر 1384, 11:09 صبح
خب از OnMouseMove استفاده کنید؟
ضمنا رویداد OnShowHint (اگه اشتباه نکنم!) از ApplicationEvents معمولا جای بسیار مناسبی برای نوشتن چنین چیزهایی است. چون می تونید معین کنید وقتی ماوس از یک مستطیل بخصوص خارج شد hint غیب شود (یا refresh شود) و ... که البته در این صورت دیگر نیازی به OnMouseMove ندارید.

mzjahromi
سه شنبه 15 آذر 1384, 16:12 عصر
تا اونجائی که من خبر دارم OnShowHint برای کاری که دوستمون می خوان جواب نمیده بهتره از همون OnMouseMove استفاده کنند

Naficy
چهارشنبه 16 آذر 1384, 09:49 صبح
نگاه کردم. نام رو اشتباه نکرده بودم.
کافیه یه نگاهی به پارامتر HintInfo (درون همان OnShowHint) بیندازید تا کارتون رو راه بندازه. (خیلی بهتر از هر راه دیگه ای)

mehialdst
چهارشنبه 16 آذر 1384, 16:05 عصر
با تشکر از دوستان منظور من اینه که وقتی موس روی سطرهای dbgrid حرکت میکنه بدون اینکه بانک scroll بشه محتویات هر رکورد رو در آن hint نمایش داد

mzjahromi
چهارشنبه 16 آذر 1384, 16:07 عصر
درسته
ببخشید
اونی که من گفتم Onhint بود نه OnShowHint

mehialdst
چهارشنبه 16 آذر 1384, 16:43 عصر
فرمایش شما صحیح ولی هینت هم رکورد جاری را نشان میدهد و وقتی رکورد اسکرول نشده چطور رکورد بعدی را بگیریم؟

mzjahromi
چهارشنبه 16 آذر 1384, 17:52 عصر
اینهم هست
به نظرم Mousemove راحت تر کنترل میشه.
یا ترکیبی از ایندو

mehialdst
پنج شنبه 17 آذر 1384, 15:16 عصر
من جواب خودمو نگرفتم
چطور باید بفهمم کدام رکورد زیر کرسر موس هست تا محتویات آن نمایش داده بشه

vcldeveloper
جمعه 18 آذر 1384, 05:37 صبح
اگه از ADO استفاده می کنید، می تونید از Clone استفاده کنید:


type
THackedDBGrid = class(TDBGrid);
procedure TForm1.DBGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
DataSet, Clone : TCustomADODataSet;
Bookmark : TBookmarkStr;
GridCoords : TGridCoord;
Movment : integer;
Text : string;
begin
DataSet := AdoDataSet1;(* Replace AdoDataSet1 with your own ADO Dataset *)
if (DataSet = nil) or (not DataSet.Active) then
Exit;
Clone := TCustomADODataSet.Create(nil);
with THackedDBGrid(Sender) do
begin
try
GridCoords := MouseCoord(X,Y);
Bookmark := DataSet.Bookmark;
Clone.Clone(DataSet);
Clone.Bookmark := Bookmark;
//Distance from the active record in Clone
Movment := GridCoords.Y - Row;
Clone.MoveBy(Movment);
//Read fields data
Text := Clone.Fields[0].AsString;
//Show hint
Hint := Text;
ShowHint := True;
Application.ActivateHint(ClientToScreen(Point(X,Y) ));
finally
Clone.Free;
end; //try-finally
end; //with
end;

سید مسعود موحد
شنبه 19 آذر 1384, 15:37 عصر
بابا ایول علی آقا کارت درست خیلی باهاش حال کردم کار باحالی بود

mehialdst
شنبه 19 آذر 1384, 16:09 عصر
آقای کشاورز دستت درد نکنه
ولی اگه از ado استفاده نکنیم چی؟