PDA

View Full Version : نمایش تذکر (Hint)



Hamid_PaK
پنج شنبه 22 دی 1384, 07:53 صبح
با سلام به تمامی دوستان ...
وقتی هینت یک شی رو پر می کنیم و نمایش اون رو هم روشن می کنیم ، هینت در هنگام آمدن کرسر روی اون شی ( باکمی مکس ) نمایش داده میشه ... تا اینجاش برای توضیح بود ، حالا ما همین هینت رو چطور با کد می تونیم نمایش دهیم ( من سرچ کردم درباره THintWindow هم می دونم ولی هینت ویندوز مد نظر من هست ) ...
شرط من در نمایش این هینت این هست که بسرعت هنگامی که کرسر روی شی آمد نمایش داده بشه و در صورت حرکت کرسر در قسمتهای مختلف شی بسرعت هینت رو بشه تغییر داد و نمایش داد ...

مثال : یک لیست باکس داریم که n تا ایتم داره وقتی روی هر کدوم کرسر حرکت کرد ، ایتمی که کرسر روی اون می ره در هینت لیست باکس قرار گرفته و به نمایش دربیاد ودر صورت حرکت بروی ایتم دیگر این روند تکرار بشه و بسرعت هینت تغییر بکنه ...

با تشکر ...

babak869
پنج شنبه 22 دی 1384, 14:24 عصر
اگه منظورتون اینه :


Button1.Hint:='Some Description....';
Button1.ShowHint:=True;

که براحتی از درون برنامه میشه اونو نمایش داد و اگه منظورتون این نیست بیشتر توضیح بدید

Hamid_PaK
پنج شنبه 22 دی 1384, 16:46 عصر
دیگه بیشتر از این چیرو توضیح بدم ... یک بار دیگه سوال رو مرور کنید

با تشکر .

vcldeveloper
جمعه 23 دی 1384, 04:00 صبح
Application.ActivateHint

Abbasgholami
جمعه 23 دی 1384, 17:21 عصر
application.hintpause:=100;
و یا هر عدد دیگر.
این دستور را در رویدید OnCreateفرم بنویس.

shayan_delphi
جمعه 23 دی 1384, 18:36 عصر
یه ListBox بگذار روی فرم و آیتهایی در آن بنویس و خاصیت Showhint:=True را برای آن تنظیم کن.
و

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var iIndex : Integer ;
begin
with ListBox1 do begin
iIndex:=SendMessage(Handle,LB_ITEMFROMPOINT,0, MakeLParam(x,y)) ;
if (iIndex >= 0) and (iIndex <= Items.Count) Then
Hint := Items[iIndex]
else
Hint := ''
end;
end;

Hamid_PaK
شنبه 24 دی 1384, 08:08 صبح
از تمامی دوستان کمال تشکر رو دارم ، مشکل با این کد حل میشه ( یکم پیچیده هست ولی همونی هست که می خواستم ) :



unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
ListBox2: TListBox;
procedure ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormCreate(Sender: TObject);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure ListBox2MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
itemShowed:Integer;
lbHint:THintWindow;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
ListBox1.Items := Screen.Fonts;
lbHint := THintWindow.Create(Self);
with lbHint do
begin
Parent := ListBox1;
Color := Application.HintColor;
Hide;
end;
end;

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,Y: Integer);
var
point,curs:TPoint;
itemSelc:Integer;
itemName:String;
bRect:TRect;
begin
GetCursorPos(curs);
point.X := X;
point.Y := Y;
with ListBox1 do
begin
itemSelc := ItemAtPos(point,True);
if itemSelc = itemShowed then Exit;
lbHint.ReleaseHandle;
if itemSelc > -1 then
begin
itemName := Items[itemSelc];
itemShowed := itemSelc;
bRect := lbHint.CalcHintRect(100,itemName,nil);
bRect.Left := bRect.Left+curs.X;
bRect.Right := bRect.Right+curs.X;
bRect.Top := bRect.Top+curs.Y-20;
bRect.Bottom := bRect.Bottom+curs.Y-20;
lbHint.ActivateHint(bRect,itemName);
end;
end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
lbHint.ReleaseHandle;
itemShowed := -1;
end;

end.

فقط هنوز یک مشکل کوچولو داره وقتی شی های روی فرم زیادند و هینتشون هم روشن هست اگر بسرعت از روی لیست باکس بروی شی دیگری حرکت کنیم هینت لیست باکس از بین نرفته روی فرم باقی می ماند ... چطور این مشکل را حل کنم ؟؟؟

یا حق !!!

سید مسعود موحد
شنبه 24 دی 1384, 11:11 صبح
روی Onexit‌ هر آبجکت باید Hint خود را خاموش کنید.

babak_delphi
پنج شنبه 29 دی 1384, 03:27 صبح
لطفا اگه می شه نحوه نمایش Hint به شکل دلخواه (مثلا بالن) رو هم توضیح بدین.
ممنون.

Hamid_PaK
پنج شنبه 29 دی 1384, 06:10 صبح
دوست عزیز من پیشنهاد می کنم از کامپوننت استفاده کنید بسیار ساده و عالی کار می کنند ...
یکی رو که من باهاش کار کردم ( Office Assistant Package v3.30 ) رایگان هم هست ، آقای کامبیز خجسته نوشته است ...

یا حق !!!

babak_delphi
دوشنبه 10 بهمن 1384, 17:22 عصر
میشه لطفا لینکش رو اینجا بذاری
ممنون

Hamid_PaK
دوشنبه 10 بهمن 1384, 22:44 عصر
http://www.delphiarea.com/products/offbtn

اینم لینک سایت آقای خجسته ...

یا حق !!!