Çeviri: Ramazan Gülbahar.
TListView Sub Items Hint Göstermek
ListView Item Hintleri Nedir?
TListView’de Hint göstermek için ShowHint özelliğini kullanırız, fare ListView üzerinde gezinirken hint gösterir.
En iyi çözüm ise, list view kullandığımız zaman custom hints özelliğinin her list view nesnesi için ayrı bir hint göstermesidir. Daha fazlasıda var, list view’in her sub item’i için hint göstermesi.
ListView’in OnInfoTip olayı, Eğer fare bir nesne üzerinde durursa, farenin üzerinde durduğu nesneyi algılar. Varsayılan olarak hint kullanılabilir olduğu zaman (ShowHint özelliği true olduğu zaman), list view belirtilen yerdeki hint’i Hint özelliğini kullanarak gösterir.
List view’de her alt nesnenin hint göstermesi için: OnInfoTip ve OnMouseMove olaylarını kullanmaya ihtiyacımız var.
OnInfoTip olayının nasıl kullanıldığını görelim.
Kod: Tümünü seç
procedure TLVHintsForm.ListView1InfoTip(Sender: TObject; Item: TListItem; var InfoTip: string) ;
begin
{Bütün nesneleri(items) alt nesneleriyle(sub items) beraber göster}
InfoTip := InfoTip + #13#10 + item.SubItems[0] + #13#10 + item.SubItems[1];
end;
Kod: Tümünü seç
uses CommCtrl;
procedure TLVHintsForm.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer) ;
var
pt: TPoint;
li : TLIstItem;
lvHitInfo: TLVHitTestInfo;
hint : string;
begin
pt := ListView1.ScreenToClient(Mouse.CursorPos) ;
li := ListView1.GetItemAt(pt.x, pt.y) ;
{Alt nesnenin(sub item) üzerindemi?}
if li = nil then
begin
FillChar(lvHitInfo, SizeOf(lvHitInfo), 0) ;
lvHitInfo.pt := pt;
{Alt nesnenin(sub item) üzerinde ise!}
if -1 <> ListView1.Perform(LVM_SUBITEMHITTEST, 0, LParam(@lvHitInfo)) then
begin
hint := Format('Name: %s, %s : %s',[
ListView1.Items[lvHitInfo.iItem].Caption,
ListView1.Columns[lvHitInfo.iSubItem].Caption,
ListView1.Items[lvHitInfo.iItem].SubItems[-1 + lvHitInfo.iSubItem]]) ;
if hint <> Memo1.Lines[0] then
begin
Memo1.Lines.Insert(0, hint) ;
{Hinti aktif yap}
ListView1.Hint := hint;
Application.ActivateHint(Mouse.CursorPos) ;
end;
end;
end;
end;
ListView’e LVM_SUBITEMHITTEST mesajını yolluyarak TLVHitTestInfo kayıdından (record) bütün nesneleri(items) ve alt nesneleri(Sub Items) ListView’e doldurabiliriz.
Eğer fare alt nesnenin(sub-item) üzerine gelirse, hint penceresi Application.ActivateHint metodunu kullanarak aktif olacak.