TTreeView editieren

Rund um die LCL und andere Komponenten
MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

TTreeView editieren

Beitrag von MmVisual »

Hallo,
Wenn ich in einem TTreeView-Node editiere, dann werden die Events:
- OnEditing bei Start Editieren
- OnEdited bei Ende Editieren aufgerufen.

Damit versetze ich eine TQuery in Edit-Mode und anschließend poste ich diese Änderung.

Nun zum Soderfall:
- OnEditing bei Start Editieren
- ESC-Taste, beendet Edit-Vorgang und beläßt den alten Inhalt (ist ja auch gut so.)

Nun ist meine Query immer noch im Edit-Mode. Gibt es von TTreeView ein Event, das verschickt wird wenn das Edit mit ESC abgebrochen wird?
Das Key-Press Event tut nicht, denn während dem Edit ist eine andere Komponente da.

Vielen Dank für eure Hilfe.
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: TTreeView editieren

Beitrag von theo »

Ich glaube nicht.
Kannst du das nicht anders lösen? z.B. OnExit oder auf der Form mit KeyPreview, oder einfach bevor du eine nächste Aktion ausführst?

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

Vielen Dank für die Antwort.

Ich erkenne, wenn im Baun ein anderer Eintrag angeklickt wird, dass es ein anderer Node ist. Ist aber "unschön" und erst später wird der Button Disabled.

Ich hab da auch ein "Abbruch" Button drin, wenn ich den drücke, dann wird erst mal das TTreeView positiv quittiert und ich muss zurück rechnen, und die Eingabe im Nachhinen rückgängig machen :roll: .
(Halt die üblichen Tasten Neu,Speichern,Abbruch,Löschen wie bei einer Datenbank-Anwendung)

Schade, dass es nicht einen "Trick" gibt oder das Event "OnEditCancel" oder besser "OnEditEnd".
EleLa - Elektronik Lagerverwaltung - www.elela.de

BeniBela
Beiträge: 309
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: TTreeView editieren

Beitrag von BeniBela »

Ist das in Delphi auch so? Sonst könntest du es als LCL-Fehler melden.

Oder einfach die LCL umprogrammieren, die relevante Funktion ist CustomTreeView.EndEditing(Cancel: boolean) in treeview.inc:4664.
Oder TCustomTreeView.EditorKeyDown in treeview.inc:5061. (die ließe sich auch in einer abgeleiteten Klasse überschreiben)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: TTreeView editieren

Beitrag von pluto »

Versuch mal die Tasten manuell abzufangen. Es gibt z.b. meine ich eine Methode die irgenetwas mit Abbrechen zu tun hat. CancelEdit oder AbortEdit oder so.
Das Gegenstück für F2 müsste edit oder so ähnlich sein. Damit müsstest du sie Manuell Aktivieren können.
(Wenn ich dich richtig verstanden habe).
MFG
Michael Springwald

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

@BeniBela:
Sowas:

Code: Alles auswählen

comctrls:
1969:
  TTVEditEndEvent = procedure(Sender: TObject; Node: TTreeNode;
                              Cancel: Boolean) of object;
2400:
    FOnEditEnd: TTVEditEndEvent;
2585:
    property OnEditEnd: TTVEditEndEvent read FOnEditEnd write FOnEditEnd;
 
treeview.inc:4688
  if Assigned(FOnEditEnd) then FOnEditEnd(Self, FEditingItem, Cancel);

:?:
EleLa - Elektronik Lagerverwaltung - www.elela.de

BeniBela
Beiträge: 309
Registriert: Sa 21. Mär 2009, 17:31
OS, Lazarus, FPC: Linux (Lazarus SVN, FPC 2.4)
CPU-Target: 64 Bit

Re: TTreeView editieren

Beitrag von BeniBela »

Ja, genau.
(so können Fremde natürlich schlechter dein Projekt compilern, aber
eventuell akzeptiert das LCL-Team es ja als allgemeinen Patch)

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

Denen würde ich das gerne posten. Ich denke es hat gute Chancen dass es akzeptiert wird, denn nur mit dieser Erweiterung kann man direkt eine TQuery richtig behandeln.

Ich hab leider keine Ahnung wie ich das richtig mache, so dass es in zukünftigen Versionen drin ist, kannst Du mir bitte helfen?

Edit: Ich hab das bei mir jetzt einpegroggt und es tut!

Das fehlte noch:

Code: Alles auswählen

comctrls:
2738:     property OnEditEnd;

Damit das neue Event im Objektinspektor sichtbar wird.

Anbei die geänderten Dateien.
Dateianhänge
treeview.inc
C:\Lazarus\lcl\include\
(146.19 KiB) 71-mal heruntergeladen
comctrls.pp
C:\Lazarus\lcl\
(119.65 KiB) 58-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

Ich habe mal mit "diff" die Änderungen gespeichert. Ich habe das zum ersten mal benutzt und habe keine Ahnung ob diese *.diff Dateien richtig sind.
Kann das bitte jmd anschauen?
Dateianhänge
treeview.diff
(87 Bytes) 68-mal heruntergeladen
comctrls.diff
(317 Bytes) 59-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: TTreeView editieren

Beitrag von carli »

Das ist doch kein diff.

Ein Diff sieht so aus (aus Wiki kopiert)

Code: Alles auswählen

--- /path/to/original ''timestamp''
+++ /path/to/new      ''timestamp''
@@ -1,3 +1,9 @@
+This is an important
+notice! It should
+therefore be located at
+the beginning of this
+document!
+
 This part of the
 document has stayed the
 same from version to
@@ -5,16 +11,10 @@
 be shown if it doesn't
 change.  Otherwise, that
 would not be helping to
-compress the size of the
-changes.
-
-This paragraph contains
-text that is outdated.
-It will be deleted in the
-near future.
+compress anything.
 
 It is important to spell
-check this dokument. On
+check this document. On
 the other hand, a
 misspelled word isn't
 the end of the world.
@@ -22,3 +22,7 @@
 this paragraph needs to
 be changed. Things can
 be added after it.
+
+This paragraph contains
+important new additions
+to this document.

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

Wie mach ich das richtig? Gibts irgendwo ein Tutorial, wenn möglich auf Deutsch :?:

Oder kann jmd mir eine Zeile Posten, die ich in der Dos-Box eingebe, als Beispiel?
EleLa - Elektronik Lagerverwaltung - www.elela.de

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von _X_ »

http://wexler-robert.de/node/20
Die Manpage von diff sollte aber auch einiges erklären ^^

mfg _X_

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: TTreeView editieren

Beitrag von MmVisual »

Super, danke, ich habs mal gemacht, anbei das .diff
So ist das gut?
Dateianhänge
patchfile.diff
(2.05 KiB) 73-mal heruntergeladen
EleLa - Elektronik Lagerverwaltung - www.elela.de

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6209
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: TTreeView editieren

Beitrag von af0815 »

Frage:

Code: Alles auswählen

TTVEditEndEvent = procedure(Sender: TObject; Node: TTreeNode; Cancel: Boolean) of object;

oder

Code: Alles auswählen

TTVEditEndEvent = procedure(Sender: TObject; Node: TTreeNode;var Cancel: Boolean) of object;


Willst du Cancel übergeben, nur als Information oder es ändern lassen ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: TTreeView editieren

Beitrag von carli »

MmVisual hat geschrieben:Super, danke, ich habs mal gemacht, anbei das .diff
So ist das gut?


Ja, so sieht ein guter Diff aus.

Damit's sich noch gut einlesen lässt, würde ich von Hand noch das da anpassen:

Code: Alles auswählen

--- lcl_old\comctrls.pp   Tue Aug 10 04:07:48 2010
+++ lcl\comctrls.pp   Tue Aug 31 08:07:21 2010

also einfach das _old wieder rausnehmen ;)

Antworten