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/)
-   -   Delphi TreeView in Datei speichern bei bestimmten Aktionen (https://www.delphipraxis.net/97392-treeview-datei-speichern-bei-bestimmten-aktionen.html)

Mazel 9. Aug 2007 18:45


TreeView in Datei speichern bei bestimmten Aktionen
 
Hallo,

ich habe ein TreeView auf meinem Formular. Nun möchte ich dieses in eine Datei speichern, wenn bestimmte Aktionen auftreten. Das scheint aber nicht ganz einfach zu sein. Folgendes:
Mit einem Button erstelle ich ein Node der editierbar ist, heißt, gleich nach dem erstellen kann man ihn ändern oder eben nicht. Das Editieren kann man mit 2 Aktionen beenden, entweder mit Enter oder mit der Maus irgendwo hin klicken. Während das Programm läuft, kann man immer wieder den Eintrg ändern.

Wie stell ich das nun am besten an, ohne bei jedem Klick auf das TreeView die Daten zu speichern, weil ich nicht weis, ob es da nicht einmal zu einem Fehler kommen könnte.

Das Enter über MouseUp ist kein Problem aber eben der Mausklick. Klicke ich zum Beispiel in ein anderes Control kann ich das wiederrum nicht so einfach abfangen.

Welche Lösung kennt ihr?

Gruß
Marcel

bitsetter 9. Aug 2007 20:06

Re: TreeView in Datei speichern bei bestimmten Aktionen
 
Hi,

bringt dich das Event onEdited des TTreeview eventuell weiter?

Mazel 9. Aug 2007 23:52

Re: TreeView in Datei speichern bei bestimmten Aktionen
 
Leider nein. Es heißt zwar, das OnEdited kurz nach dem editieren ausgelöst wird aber das ist wohl so schnell, dass es die aktuelle Änderung nicht mit einbezieht.

bitsetter 10. Aug 2007 07:48

Re: TreeView in Datei speichern bei bestimmten Aktionen
 
Hallo,

wie ändert denn der Benutzer die Items des Treeview, über das Feld welches man zum Beispiel mit
Delphi-Quellcode:
treeview.Items.Item[...].EditText;
aufrufen kann. Da würde dann falls der Eintrag geändert würde das Ereignis onEdited aufgerufen werden.

Ober wird irgendwo bei dir Code wie dieser
Delphi-Quellcode:
treeview.Items.Item[...].Text:= ...;
ausgeführt.

marabu 10. Aug 2007 08:19

Re: TreeView in Datei speichern bei bestimmten Aktionen
 
Guten Morgen,

da das Ereignis OnEdited() noch vor der endgültigen Änderung auftritt, bietet sich eine Nachrichtenverzögerung an:

Delphi-Quellcode:
uses
  ..., AppMessages;

{
unit AppMessages;
interface
uses
  Messages;
const
  UM_EDITED = WM_USER;
implementation
end.
}

type
  TDemoForm = class(TForm)
    TreeView: TTreeView;
    procedure FormCreate(Sender: TObject);
    procedure TreeViewCancelEdit(Sender: TObject; Node: TTreeNode);
    procedure TreeViewEdited(Sender: TObject; Node: TTreeNode;
      var S: String);
  private
    procedure UMEdited(var Message: TMessage); message UM_EDITED;
  end;

var
  DemoForm: TDemoForm;

implementation

{$R *.dfm}

procedure TDemoForm.UMEdited(var Message: TMessage);
begin
  with Message do
  begin
    ShowMessage(TTreeNode(LParam).Text);
    Result := 0;
  end;
end;

procedure TDemoForm.TreeViewEdited(Sender: TObject; Node: TTreeNode;
  var S: String);
begin
  PostMessage(Handle, UM_EDITED, 0, Integer(Node));
end;
Grüße vom marabu

Mazel 10. Aug 2007 09:11

Re: TreeView in Datei speichern bei bestimmten Aktionen
 
Guten Morgen,

Nachrichtenverzögerung ist sehr gut. Hat funktiomniert. Danke Dir marabu.

@bitsetter:
Ich rufe nicht EditText auf, aber die Wirkung ist die gleiche. Der Benutzer markiert das Item und klickt dan nochmal drauf, dadurch kann man ihn editieren.

Da kann ich das jetzt so umbauen, dass ich die Abfrage mit der Entertaste nicht mehr brauche, da es ja jetzt funktioniert.

Nochmals Danke an beide.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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