Форум: "Основная";
Текущий архив: 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