Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
Delphi 2006 Architect
|
Re: TreeView: Item nach Text suchen
20. Jun 2007, 03:14
Hallo,
vlt. hilft dir das weiter:
Delphi-Quellcode:
uses ..., CommCtrl;
[...]
function FindItemByName(Wnd : hWnd; hItem : HTREEItem;
szItemName : LPCTSTR) : HTREEItem ;
const
MAXTEXTLEN = 50;
var
szBuffer: array [0..MAXTEXTLEN + 1] of Char;
Item : TTVItem;
hItemFound, hItemChild : HTREEItem;
begin
if ( hItem = nil ) then
begin
hItem := HTREEItem(SendMessage(Wnd, TVM_GETNEXTItem, TVGN_ROOT, 0));
end;
while ( hItem <> nil ) do
begin
Item.hItem := hItem;
Item.mask := TVIF_TEXT or TVIF_CHILDREN;
Item.pszText := szBuffer;
Item.cchTextMax := MAXTEXTLEN;
SendMessage(Wnd, TVM_GETItem, 0, LongInt(@Item));
if ( lstrcmp(szBuffer, szItemName) = 0 ) then
begin
Result := hItem;
Exit;
end;
if ( Item.cChildren > 0 ) then
begin
hItemChild := HTREEItem(SendMessage(Wnd, TVM_GETNEXTItem,
TVGN_CHILD, longint(hItem)));
hItemFound := FindItemByName(Wnd, hItemChild, szItemName);
if ( hItemFound <> nil ) then
begin
Result := hItemFound;
Exit;
end;
end;
hItem := HTREEItem(SendMessage(Wnd, TVM_GETNEXTItem,
TVGN_NEXT, LPARAM(hItem)));
end;
Result := nil;
end;
Aufruf koennte so lauten:
Delphi-Quellcode:
procedure TFrmMain.BtnSearchClick(Sender: TObject);
var
hItem : HTREEItem;
begin
hItem := FindItemByName(TvwInfo.Handle, nil, 'Hier dein Suchtext');
if ( hItem <> nil ) then
begin
TvwInfo.SetFocus;
SendMessage(TvwInfo.Handle, TVM_SELECTItem, TVGN_CARET, LongInt(hItem));
end;
end;
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
|
|
Zitat
|