Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.06;
Скачать: CL | DM;

Вниз

hint для Items в ListBox   Найти похожие ветки 

 
Alex_pv2 ©   (2005-01-23 08:35) [0]

Есть ListBox как при наведении на items мышкой сформировать hint c текстом этого Items"a


 
aus   (2005-01-23 09:53) [1]

Вроде в TListView это уже реализовано, да и настроить его св-ва можно таким способом, что мало чем от TListBox будет отличаться, по внешнему виду по крайней мере.


 
Alex_pv2 ©   (2005-01-23 10:30) [2]

aus   (23.01.05 09:53) [1]
хоть убей не получаеться его сделать похожим на выпадающий список


 
aus   (2005-01-23 10:38) [3]

Разве TListBox - выпадающий список? Может TComboBox?


 
Alex_pv2 ©   (2005-01-23 10:45) [4]

блин сорри компонент перепутал TComboBox


 
aus   (2005-01-23 11:00) [5]

THintWindow
ActivateHint
CursorPos


 
Alex_pv2 ©   (2005-01-23 11:05) [6]

aus   (23.01.05 11:00) [5]
ИНФОРМАТИВНО !!!!


 
Igor_thief   (2005-01-23 12:18) [7]

procedure DoHint(AControl: TControl) ;
var
  pt: TPoint;
begin
  //pt := AControl.ClientToScreen(Point(1,1)) ;
  //SetCursorPos(pt.x, pt.y) ;
  Application.ActivateHint(pt) ;
end;

procedure TForm1.ApplicationIdle(
sender: TObject; var Done: boolean);
var
 pt         : TPoint;
 w          : Hwnd;
 ItemBuffer : array[0..256] of Char;
 idx        : Integer;
 s          : string;
begin
 pt := Mouse.CursorPos;
 w := WindowFromPoint(pt);
 if w = 0 then Exit;

 GetClassName(w, ItemBuffer, SizeOf(ItemBuffer));
 if StrIComp(ItemBuffer, "ComboLBox") = 0 then
 begin
   Windows.ScreenToClient(w, pt);
   idx := SendMessage(w,
                      LB_ITEMFROMPOINT,
                      0,
                      LParam(PointToSmallPoint(pt)));
   if idx >= 0 Then
   begin
     if LB_ERR <> SendMessage(w,
                              LB_GETTEXT,
                              idx,
                              LParam(@ItemBuffer))  then
     begin
       s := "Mouse over item: " + #13#10 +
            Format("Combo.Name: %s,%sItem.Text: %s",
                   [ActiveControl.Name, #13#10, ItemBuffer]);

       ComboItemLabel.Caption := s;

       hw.DoActivateHint(ActiveControl.Name + ItemBuffer, "Hint for: " + ItemBuffer);
     end;
   end;
 end;
end; (*ApplicationIdle*)

procedure TForm1.ComboCloseUp(sender: TObject);
begin
 Application.OnIdle := nil;
 hw.ReleaseHandle;
end; (*ComboCloseUp*)

procedure TForm1.ComboDropDown(sender: TObject);
begin
 Application.OnIdle := ApplicationIdle;

end; (*ComboDropDown*)

procedure TForm1.FormCreate(Sender: TObject);
begin
 ComboBox1.OnDropDown := ComboDropDown;
 ComboBox2.OnDropDown := ComboDropDown;

 ComboBox1.OnCloseUp := ComboCloseUp;
 ComboBox2.OnCloseUp := ComboCloseUp;

 hw := TComboItemHint.Create(self);
end;

{ TComboItemHint }
procedure TComboItemHint.DoActivateHint(ControlName : string; Text: string);
var
 pt : TPoint;
 r : TRect;
begin
 self.ControlName := ControlName;
 if DoHint then
 begin
   pt := Mouse.CursorPos;

   //some hard-coding
   r:= Rect(pt.X + 16 ,pt.Y + 16,pt.X + 100, pt.Y + 32);

   ActivateHint(r,Text);
   DoHint := false;
 end;
end;

procedure TComboItemHint.SetControlName(const Value: string);
begin
 if FControlName <> Value then
 begin
   ReleaseHandle;
   //remove flicker
   DoHint := True;
   FControlName := Value;
 end;
end;


 
Igor_thief   (2005-01-23 12:19) [8]

hw : TComboItemHint;


 
Alex_pv2 ©   (2005-01-23 12:50) [9]

Igor_thief   (23.01.05 12:19) [8]
прости за тупость не прохадимую, но попытался использовать твой пример, не работает, видимо чего то не догоню
Ругаеться при описании переменной hw : TComboItemHint;
если не сложно скинь пример на ящик alex_pv@hotbox.ru


 
Separator ©   (2005-01-23 13:00) [10]

А скажите почему в TComboBox и TListBox не работает OnDrawItem?


 
begin...end ©   (2005-01-23 13:04) [11]

> [10] Separator ©   (23.01.05 13:00)

Вероятно, потому, что свойство ComboBox.Style не равно csOwnerDrawFixed или csOwnerDrawVariable, а свойство ListBox.Style не равно lbOwnerDrawFixed, lbOwnerDrawVariable или lbVirtualOwnerDraw.


 
Separator ©   (2005-01-23 13:19) [12]

Вот что пишут по поводу Hint"а в Culiba2000:
В своем компоненте объявите FTipHint:

--------------------------------------------------------------------------------
   type
TVSComboBox = class(TCustomComboBox)

private
FHint: THintWindow;

protected
procedure WMCTLCOLORLISTBOX(var Message: TMessage); message WM_CTLCOLORLISTBOX;

и не забудьте выполнить инициализацию в конструкторе вашего компонента:

--------------------------------------------------------------------------------
   …
begin
inherited Create(AOwner);
FHint := THintWindow.Create(Self);


Чтобы получить информацию об активной строке в выпадающем списке ComboBox перехватите сообщение WM_CTLCOLORLISTBOX. В процедуре сообщения анализируйте - если длина строки больше ширины выпадающего списка – передайте "длинную" строку в ваш Hint и активируйте его:

--------------------------------------------------------------------------------
   FHint.ActivateHint(TextRC, Items[ItemIndex]);

где
TextRC – прямоугольник для строки подсказки
Items[ItemIndex] – "длинная" строка из выпадающего списка

Если активная строка в выпадающем списке "короткая" – спрячьте Hint:

--------------------------------------------------------------------------------
   FHint.ReleaseHandle;

Для получения подробной информации о классе THintWindow воспользуйтесь Help из Delphi.


 
Igor_thief   (2005-01-23 13:25) [13]

Alex_pv2 ©   (23.01.05 12:50) [9]
Ну ладно, лови пример!


 
Igor_thief   (2005-01-23 13:27) [14]

Может так броблема ищезнет?

interface

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

type
 TComboItemHint = Class(THintWindow)
 private
   DoHint : boolean;

   FControlName: string;
   procedure SetControlName(const Value: string);
   private
     property ControlName : string read FControlName write SetControlName;
   procedure DoActivateHint(ControlName : string; Text : string);
 end;

 TForm1 = class(TForm)
   ComboBox1: TComboBox;
   ComboBox2: TComboBox;
   ComboItemLabel: TLabel;
   procedure FormCreate(Sender: TObject);
 private
   hw : TComboItemHint;

   procedure ComboDropDown(sender : TObject);
   procedure ComboCloseUp(sender : TObject);
   procedure ApplicationIdle(sender : TObject; var Done : boolean);
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure DoHint(AControl: TControl) ;


 
Alex_pv2 ©   (2005-01-23 16:18) [15]

Igor_thief   (23.01.05 13:25) [13]
ОГРОМНОЕ СПАСИБО!!!!!!!!!!!!
Будешь у нас в гостях пиво обеспечено!!!!!!!!!!!!



Страницы: 1 вся ветка

Текущий архив: 2005.02.06;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.026 c
14-1105860340
Девушка
2005-01-16 10:25
2005.02.06
Вычисление ip-ка, браузера...


1-1106608318
netmouse
2005-01-25 02:11
2005.02.06
Возможно ли указать текст в виде ссылки (подчеркнутый)


1-1105772482
Александр1
2005-01-15 10:01
2005.02.06
Работа с Word


3-1104378632
Russko
2004-12-30 06:50
2005.02.06
Динамический запрос на вставку


14-1105878178
Kerk
2005-01-16 15:22
2005.02.06
Подскажите приличное место, ...