Autor |
Beitrag |
hydemarie
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: 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'?
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: 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
|
Verfasst: Sa 24.12.16 19:10
- Nachträglich durch die Entwickler-Ecke gelöscht -
Für diesen Beitrag haben gedankt: hydemarie
|
|
hydemarie
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: 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:
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
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 24.12.16 23:41
hydemarie hat folgendes geschrieben : | 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.
hydemarie hat folgendes geschrieben : | 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.
hydemarie hat folgendes geschrieben : | 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
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: Sa 24.12.16 23:50
Einloggen, um Attachments anzusehen!
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: 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.
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: So 25.12.16 03:59
Mir würde ja ein konsistentes Verhalten sinnvoller scheinen, aber gut, das ist wohl Geschmackssache...
|
|
jaenicke
Beiträge: 19284
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
Beiträge: 481
Erhaltene Danke: 51
|
Verfasst: So 25.12.16 16:55
Hab' ich nicht dran gedacht... danke!
|
|