Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TreeView: Item nach Text suchen (https://www.delphipraxis.net/94317-treeview-item-nach-text-suchen.html)

Ironmaster 19. Jun 2007 23:30


TreeView: Item nach Text suchen
 
Hallo

ich habe folgendes Problem:
Ich hab einen Namen von einem TGLBaseSceneObject, nennen wir es 'Item1'.
Jetzt muss ich genau das Item aus TreeView1 finden, was 'Item1' heißt, damit ich es selektieren und anklicken kann.
Dabei wurde jedem Item ein TGLBaseSceneObject gegeben, wobei das Item den Namen des dazugehörigen TGLBaseSceneObject im Text enthält.
Gibt es einen Code, der das Item an dem String der TreeNode erkennt?


danke

Mackhack 20. Jun 2007 02:14

Re: TreeView: Item nach Text suchen
 
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;

DP-Maintenance 20. Jun 2007 05:21

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "VCL / WinForms / Controls" verschoben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz