Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Anmerkung in einer von einer Komponente erstellten Prozedur
galagher - Di 04.12.12 18:20
Titel: Anmerkung in einer von einer Komponente erstellten Prozedur
Hallo!
Wieder wende ich mich mit einer Frage an euch:
Wie kann man in einer von einer Komponente erzeugten Prozedur, konkret in OnClick, eine Anmerkung schreiben lassen?
So, wie es bei Delphi vorgesehen ist, wird die Prozedur erstellt, sobald man im OI auf das OnClick-Ereignis klickt - klar. Ich möchte aber in der so erstellten Prozedur einen Anmerkungstext haben, etwa so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.CardPanel1Click(Sender: TObject); begin end;
procedure TForm1.CardPanel1Click(Sender: TObject); begin end; |
Kann man das realisieren? Wenn ja, und das ist die Frage :mrgreen: , wie?
WasWeißDennIch - Di 04.12.12 19:27
Ob das geht, weiß ich ehrlich gesagt nicht. Was ich aber weiß: es würde mich fürchterlich anstinken, wenn eine Fremdkomponente meinen Code mit Kommentaren zumüllt. Bist Du wirklich sicher, dass das notwendig ist?
galagher - Di 04.12.12 19:55
WasWeißDennIch hat folgendes geschrieben : |
es würde mich fürchterlich anstinken, wenn eine Fremdkomponente meinen Code mit Kommentaren zumüllt. |
1. Kann man das jedenfslls entfernen, 2. Wenn die Kommentare nützlich sind, dann nicht!
WasWeißDennIch hat folgendes geschrieben : |
Bist Du wirklich sicher, dass das notwendig ist? |
Ich meine ja nur auch nur für diese eine Komponente und da nur "Benutze Hint und nicht Caption".
Egel, was der Hintergrund ist: Geht das prinzipiell?
WasWeißDennIch - Di 04.12.12 19:59
Und wann ist ein Kommentar, den ich evtl. gar nicht haben will, nützlich? Wenn in der Methode irgendetwas "Komisches" geschieht, dann gehört das entweder in die Doku (readme.txt) oder sollte grundsätzlich noch einmal überdacht werden.
galagher - Di 04.12.12 20:08
WasWeißDennIch hat folgendes geschrieben : |
Und wann ist ein Kommentar, den ich evtl. gar nicht haben will, nützlich? |
Naja, das ist ja nun doch ein Argument....
Stopp erstmal hier,
vielleicht kann ich das auch mit einer property lösen!
jaenicke - Di 04.12.12 20:54
Worum geht es denn konkret?
Vielleicht um zusätzliche Daten und wo man die herbekommt? Dann übergib die einfach als Parameter an OnClick. ;-)
Delete - Mi 05.12.12 00:41
jaenicke hat folgendes geschrieben : |
Worum geht es denn konkret? |
Ich glaube, es geht um eine Gedächtnisstütze ...
WasWeißDennIch - Mi 05.12.12 10:02
Sofern ich das richtig verstanden habe, hast Du eine Komponente abgeleitet und willst nun verhindern, dass eine bestimmte Property benutzt wird, stimmt das soweit? In dem Fall würde ich zuerst überprüfen, ob das nicht auch so ginge: in der VCL sind viele, wenn nicht gar die meisten, Komponenten von einer TCustomKomponente abgeleitet. In dieser sind die Properties protected deklariert und werden erst in der Ableitung nach public bzw. published verschoben. Wenn man also nicht von TKomponente, sondern von TCustomKomponente ableitet, kann man auf diese Veröffentlichung Einfluss nehmen. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| type TCustomKomponente = class(TComponent) ... protected property Bla: TBla read FBla write FBla; property Blubb: TBlubb read FBlubb write FBlubb; ... end;
TKomponente = class(TCustomKomponente) ... published property Bla; property Blubb; ... end;
TDeineKomponente = class(TCustomKomponente) ... published property Bla; ... end; |
In der eigenen Klasse wird also die Property Blubb nicht veröffentlicht und steht somit von außen nicht zur Verfügung.
galagher - Mi 05.12.12 18:36
Perlsau hat folgendes geschrieben : |
Ich glaube, es geht um eine Gedächtnisstütze ... |
Genau das! Ein Tipp!
WasWeißDennIch hat folgendes geschrieben : |
Sofern ich das richtig verstanden habe, hast Du eine Komponente abgeleitet und willst nun verhindern, dass eine bestimmte Property benutzt wird, stimmt das soweit? |
Nein, nicht verhindern, Das OnClick ist schon gut. Da soll einfach ein Hinweis stehen, dass man Hint statt Caption nutzen soll. Ich werde das aber jetzt wahrscheinlich anders lösen oder ganz bleiben lassen. Mittlerweile gefällt mir der Gedanke nicht mehr so, dass eine Komponete Kommentare irgendwo hin setzt, da hat
WasWeißDennIch nicht Unrecht.
WasWeißDennIch - Mi 05.12.12 18:42
Nunja, der Zusammenhang zwischen OnClick, Hint und Caption ist mir zwar verborgen geblieben, aber wenn Du unbedingt einen Hinweis haben möchtest, könntest Du in Deinem Komponenten-Code ja ein
Delphi-Quelltext
1:
| {$MESSAGE HINT 'TDingsbums: Hint statt Caption benutzen'} |
unterbringen.
[edit] Wobei das u.U. auch wieder stört, aber das kann man ggf. auch noch z.B. auf die Debug-Konfiguration eingrenzen. [/edit]
galagher - Mi 05.12.12 21:20
WasWeißDennIch hat folgendes geschrieben : |
Nunja, der Zusammenhang zwischen OnClick, Hint und Caption ist mir zwar verborgen geblieben, aber wenn Du unbedingt einen Hinweis haben möchtest, könntest Du in Deinem Komponenten-Code ja ein
Delphi-Quelltext 1:
| {$MESSAGE HINT 'TDingsbums: Hint statt Caption benutzen'} |
unterbringen. |
Ja, das kann ich brauchen! Danke!
Also: Caption kann, muss aber nicht den ungekürzten, vollständigen Pfadnamen einer Datei enthalten. Hint enthält immer den ganzen Pfad. Könnte dazu auch eine StringList verwenden, aber ich brauche das so und nicht anders.
WasWeißDennIch hat folgendes geschrieben : |
[edit] Wobei das u.U. auch wieder stört, aber das kann man ggf. auch noch z.B. auf die Debug-Konfiguration eingrenzen. [/edit] |
Mal sehen, ob ich mit Google dazu etwas finde!
jaenicke - Mi 05.12.12 21:32
galagher hat folgendes geschrieben : |
Also: Caption kann, muss aber nicht den ungekürzten, vollständigen Pfadnamen einer Datei enthalten. Hint enthält immer den ganzen Pfad. |
Das hört sich so an als ob in der Tat eine entsprechende Property viel sinnvoller ist. FullPath oder so.
Denn Caption ist der Titel / Inhalt einer Komponente und Hint der Hinweistext, der als Hint angezeigt wird. Beides hat rein gar nichts mit einer bestimmten Funktion zu tun, egal ob du es so nutzt. Das kennt aber niemand so, weil es standardmäßig eine feste Bedeutung hat. Deshalb macht es Sinn eine property FullPath anzulegen, die beim Schreiben einfach in Hint reinschreibt, wenn das bei dir so sein soll. ;-)
So kannst du die Eigenschaften nutzen wie du es meinst, hast aber für einen neuen Benutzer auch eine Eigenschaft, die er über den Namen für den Zweck findet.
galagher - Mi 05.12.12 21:39
jaenicke hat folgendes geschrieben : |
So kannst du die Eigenschaften nutzen wie du es meinst, hast aber für einen neuen Benutzer auch eine Eigenschaft, die er über den Namen für den Zweck findet. |
Ja, stimmt natürlich. Jedenfall klappt es hervorragend mit
{$MESSAGE HINT}.
Eine property FullPath ist aber besser. Werde es wohl so machen!
jaenicke - Do 06.12.12 08:08
galagher hat folgendes geschrieben : |
Jedenfall klappt es hervorragend mit {$MESSAGE HINT}. |
Aber nur bei dir, denn ein Benutzer der Komponente wird diese kaum selbst jedesmal kompilieren. Und dann wird er AFAIK auch diese Hinweise nicht sehen, wenn die Unit gar nicht neu kompiliert wird.
galagher - Do 06.12.12 20:09
jaenicke hat folgendes geschrieben : |
Aber nur bei dir, denn ein Benutzer der Komponente wird diese kaum selbst jedesmal kompilieren. |
Ja, stimmt allerdings...
Vielleicht verwefe ich das auch alles und mach' etwas anderes, mit einer Variablen, die den Pfad enthält, oder eine StringList für mehrere dieser Komponenten oder ein Array!
jaenicke - Fr 07.12.12 00:38
galagher hat folgendes geschrieben : |
Vielleicht verwefe ich das auch alles und mach' etwas anderes, mit einer Variablen, die den Pfad enthält, oder eine StringList für mehrere dieser Komponenten oder ein Array! |
Der Pfad gehört zu einer Komponente, deshalb gehört das auch grundsätzlich erst einmal in ein private-Feld, eine Liste oder ein Array würden ja voraussetzen, dass du die Komponenten intern auch als Liste hast usw., das wäre ja kaum sinnvoll. Ob der Wert dann zusätzlich in Hint oder so kommt, ist ja egal, das kann der Setter deiner Eigenschaft FullPath ja machen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!