Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.02.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.039 c
3-1105198353
TechnoDreamer
2005-01-08 18:32
2005.02.06
Как программно изменить пароль на базе Access?


8-1098510580
mr.Faga
2004-10-23 09:49
2005.02.06
Как нарисовать фоновую картинку на TTabSheet


14-1105970093
kaZaNoVa
2005-01-17 16:54
2005.02.06
Online проверка на вирусы


4-1103034907
qwerty2
2004-12-14 17:35
2005.02.06
Инсталляция сервиса


3-1104390038
Russko
2004-12-30 10:00
2005.02.06
Ипользование pFIBDataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский