Einzelnen Beitrag anzeigen

Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: TreeView: Item nach Text suchen

  Alt 20. Jun 2007, 02: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)
  Mit Zitat antworten Zitat