Autor Beitrag
hydemarie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Sa 24.12.16 03:34 
Ich habe diese Anwendung jetzt in Delphi umgeschrieben. Lazarus hat ein paar Eigenheiten, die mir nicht so recht gefallen wollen. Die TTreeView habe ich natürlich immer noch drin.

Allerdings befülle ich sie nun aus einer Datenbank. Mit den entsprechenden Knoten würde ich im Folgenden gern etwas sinnvolles anstellen - dafür müssten sie aber auf Klick reagieren.

Bisher herausgefunden habe ich, dass weder TMainForm.TreeView1Click noch TMainForm.TreeView1Change irgendeinen nennenswerten Zweck erfüllen. Und nu'? :gruebel:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 24.12.16 10:46 
Ich hätte gedacht, dass OnClick hier das Richtige sein. Bist du sicher dass das Ereignis noch zugewiesen ist?

Empfehlen würde ich dir allerdings die Virtual Treeview. Die kann deutlich mehr, auch wenn es am Anfang etwas umständlich erscheint. Durch die Trennung der Oberfläche von den Daten ist es aber auch deutlich sauberer.
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Sa 24.12.16 16:28 
Die soll ja gar nicht "mehr können", die soll nur Dinge anzeigen.
Kann man Ereignisse "entzuweisen"?

Nachtrag: Ich ging davon aus, dass ein TreeView1Click() nicht noch separat zugewiesen werden muss. Muss es doch bei Buttonklicks auch nicht. Ist das Problem vielleicht, dass die Nodes erst im FormCreate hinzugefügt werden?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 24.12.16 19:10 
- Nachträglich durch die Entwickler-Ecke gelöscht -

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Sa 24.12.16 20:07 
Ah, das könnte das Problem sein. Ich hatte da nichts im IDE zugewiesen. (Weil ich noch nicht herausgefunden habe, wie man das bei einem TreeView macht. Per Doppelklick jedenfalls nicht.)

Geht aber auch nicht so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  // ...
  TreeView1.OnClick := @TreeView1Click;
end;


-->

Zitat:
[dcc64 Error] MainForm.pas(86): E2036 Variable required


Hä? :?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 24.12.16 23:41 
user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Ah, das könnte das Problem sein. Ich hatte da nichts im IDE zugewiesen. (Weil ich noch nicht herausgefunden habe, wie man das bei einem TreeView macht. Per Doppelklick jedenfalls nicht.)
Eigentlich schon. Wenn das nicht geht, steht eine gleichnamige Methode bereits in deinem Quelltext an der falschen Stelle, nämlich vermutlich unter private oder public. Eine solche Methode muss aber oberhalb davon stehen.
Alternativ könnte die Signatur (also die Parameter) unterschiedlich sein. Vielleicht bekommt das ja bei FreePascal mehr Parameter als bei Delphi.

Egal wo der Fehler liegt, am einfachsten benennst du die Methode einfach um und legst sie per Doppelklick neu an. Dann kannst du den Quelltext einfach rüberschieben, siehst dabei aber vermutlich auch die Fehlerursache.

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Geht aber auch nicht so:
Mit dem @ holst du dir die Adresse der Variablen hinter dem Zeichen um damit etwas zu machen. Aber da das keine Variable ist, kommt die entsprechende Fehlermeldung. Du musst das @ nur weglassen, dann geht es.

user profile iconhydemarie hat folgendes geschrieben Zum zitierten Posting springen:
Die soll ja gar nicht "mehr können", die soll nur Dinge anzeigen.
Auch bei der Anzeige kann die deutlich mehr. Und wie ich finde auch einfacher. Vor allem aber schneller, aber das merkst du erst bei vielen Einträgen.
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: Sa 24.12.16 23:50 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Egal wo der Fehler liegt, am einfachsten benennst du die Methode einfach um und legst sie per Doppelklick neu an.


Das Problem ist ja, dass ein Doppelklick auf die TreeView bei mir das hier macht:

Screenshot

:shock:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Mit dem @ holst du dir die Adresse der Variablen hinter dem Zeichen um damit etwas zu machen. Aber da das keine Variable ist, kommt die entsprechende Fehlermeldung. Du musst das @ nur weglassen, dann geht es.


Tatsache, das löst das Problem. Danke! :zustimm:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Auch bei der Anzeige kann die deutlich mehr. Und wie ich finde auch einfacher. Vor allem aber schneller, aber das merkst du erst bei vielen Einträgen.


Gibt es da irgendwo eine Übersicht? Ich habe hier auch noch eine TJvTreeView, für die ich genau so wenig Dokumentation finde. :)

Moderiert von user profile iconNarses: Bild als Anhang hochgeladen.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.12.16 02:20 
Wieso Doppelklick auf die Treeview? Doppelklick auf das OnClick im Objektinspektor, du willst ja schließlich das Ereignis zuweisen und nicht etwas mit der ganzen Treeview machen. ;)

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: So 25.12.16 02:42 
Weil das bei Buttons, Labels usw. auch per Doppelklick geht, hielt ich das für logisch. Aber Delphi denkt da wohl anders als ich. :oops:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.12.16 03:09 
Es wurde die am sinnvollsten scheinende Aktion auf den Doppelklick gelegt. Ein Button hat keine weitere Konfiguration und man wird meistens einfach darauf reagieren wollen, dass man drauf klickt. Deshalb wird dann automatisch dieses Event zugewiesen. Das ist einfach eine Abkürzung.
Genauso wird z.B. bei einem Doppelklick auf das Formular das OnCreate zugewiesen, da man das eher häufiger braucht als das OnClick des Formulars.

Wenn du aber ein bestimmtes Event zuweisen möchtest, musst du das in der Liste der Events machen.

Für diesen Beitrag haben gedankt: hydemarie
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: So 25.12.16 03:59 
Mir würde ja ein konsistentes Verhalten sinnvoller scheinen, aber gut, das ist wohl Geschmackssache...
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19272
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 25.12.16 08:48 
Die Komponenten sind nun einmal verschieden. Es gibt auch Komponenten, bei denen es gar kein OnClick gibt. Zum Beispiel TTimer.

Konsistent im Sinne von immer gleich wäre daher gar nicht möglich. Und würdest du bei einem Timer nicht erwarten, dass du bei einem Doppelklick im OnTimer landest? Schließlich wird das beim Timer ausgeführt.
hydemarie Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 475
Erhaltene Danke: 51



BeitragVerfasst: So 25.12.16 16:55 
Hab' ich nicht dran gedacht... danke!