Auch der Tree-View besitzt einen eingebauten Editor, mit dem Sie den angezeigten Text eines Items ändern können. Für die Grundlagen möchte ich Sie daher an den entsprechenden Beitrag der List-View verweisen, weil das Prinzip das gleiche ist.
Einzig die gesendeten Benachrichtigungen sind, natürlich!, bei einem Tree-View anders. Streng genommen unterscheiden sie sich aber auch nur vom T am Anfang: "TVN_BEGINLABELEDIT" anstelle von "LVN_BEGINLABELEDIT" z.B.
Ich will es daher mit einem kurzen Codeausriss bewenden lassen, der zeigt, wie (nach dem Ändern der Itembeschriftung) alter und neuer Text gegenüber gestellt werden. Das Prinzip entspricht dabei der List-View-Demonstration:
TVN_ENDLABELEDIT: if(PTVDispInfo(lp)^.item.pszText <> '') then begin tv.hItem := PTVDispInfo(lp)^.item.hItem; tv.mask := TVIF_TEXT; tv.pszText := buf; tv.cchTextMax := sizeof(buf);
if(TreeView_GetItem(hdr.hwndFrom,tv)) then begin MessageBox(wnd,pchar(Format('"%s" vs. "%s"', [buf,PTVDispInfo(lp)^.item.pszText])),nil,0);
Result := 1; end; end;
Und wie bei der List-View können Sie auch hier einen Shortcut definieren, der den Editmodus auslöst. Shortcut ist vielleicht nicht der passende Begriff, da Ihnen eigentlich der Tree-View mit der Benachrichtigung "TVN_KEYDOWN" die Abfrage von bestimmten Tasten erlaubt.
Ich habe mich wieder für F2 entschieden, da dies ja auch aus dem Windows Explorer bekannt ist:
TVN_KEYDOWN:
if(PTVKeyDown(lp)^.wVKey = VK_F2) then
begin
HitHandle := TreeView_GetSelection(hdr.hwndFrom);
if(HitHandle <> nil) then
begin
SetFocus(hdr.hwndFrom);
TreeView_EditLabel(hdr.hwndFrom,HitHandle);
end;
end;
Ich sollte aber erwähnen, dass in Delphi 5 die Deklaration von PTVKeyDown fehlt. Die Unit "CommCtrl.pas" enthält zwar das Record (tagTVKEYDOWN) und die dazu passende Borland-typische Deklaration (TTVKeyDown), aber die Zeigerdefinition fehlt. Ich habe daher den Typ im Beispielprogramm selbst deklariert:
type PTVKeyDown = ^TTVKeyDown;
Möglicherweise ist das aber in Ihrer Delphi-Version nicht mehr erforderlich.