![]() |
Über TWinControl an die "Caption"-Bezeichnung?
Hallo,
Delphi-Quellcode:
Ergebnis:
...
Var C : TWinControl; ActiveContrlClass,ActiveContrlName, ActiveContrlCaption : String; begin ... ActiveContrlClass:=C.ClassName; ActiveContrlName :=C.Name; ActiveContrlCaption:=C. ... ? ... end; ActiveContrlClass = TButton ActiveContrlName = ErrorButton ActiveContrlCaption = Fehler <= so lautet mein Button-Caption Wie komme ich über TWinControl an die "Caption"-Bezeichnung (z.B. des Buttons)? Gruß Crowbar |
Re: Über TWinControl an die "Caption"-Bezeichnung?
Du musst es zu einem Klassentyp casten, welcher die Eigenschaft hat.
|
Re: Über TWinControl an die "Caption"-Bezeichnung?
@mkinzler:
Was meinst Du mit "casten"? Hast Du ein Beispiel dafür? |
Re: Über TWinControl an die "Caption"-Bezeichnung?
Delphi-Quellcode:
ActiveContrlCaption:=(C as TButton).Caption;
|
Re: Über TWinControl an die "Caption"-Bezeichnung?
Danke, so klappt es! :-D
|
Re: Über TWinControl an die "Caption"-Bezeichnung?
Ich bin ich es doch noch einmal...
Zitat:
Delphi-Quellcode:
Gruß
...
Var C,FLastActiveControl : TWinControl; ActiveContrlClass,ActiveContrlName, ActiveContrlCaption : String; begin ... FLastActiveControl:=Screen.ActiveControl; ... { Active controls } if (FLastActiveControl <> nil) then begin C:=FLastActiveControl; ActiveContrlClass:=C.ClassName; ActiveContrlName :=C.Name; ActiveContrlCaption:= (C as ???).Caption; end; ... end; Crowbar |
Re: Über TWinControl an die "Caption"-Bezeichnung?
Du könntest es vorher mit
Delphi-Quellcode:
if c is TButton then
|
Re: Über TWinControl an die "Caption"-Bezeichnung?
Zitat:
Aber wie ist es, wenn ich das Caption von einer TForm über diese Funktion abrufe? Man kann ja das TForm verschieden benennen, z.B. MainForm: TMainForm oder Form2: TForm2 usw. Muß ich, um das Caption der jeweiligen TForm zu ermitteln, anders als
Delphi-Quellcode:
vorgehen?
ActiveContrlCaption:=(C as TButton).Caption;
z.B. ActiveFormCaption:=(C as TForm).Caption; <= klappt aber nicht?
Delphi-Quellcode:
... hiermit bin ich soweit, dass diese Funktion (s. oben) alles ausgibt, was ich möchte.
...
FLastActiveControl:=Screen.ActiveControl; ... i:=0; C:=FLastActiveControl; while C <> nil do begin if (i = 1) then begin { Forminfo } ActiveFormClass :=C.ClassName; ActiveFormName :=C.Name; ActiveFormCaption:= ??? end else begin { Controlinfo } ActiveContrlClass:=C.ClassName; ActiveContrlName :=C.Name; if ActiveContrlClass = 'TButton' then ActiveContrlCaption:=(C as TButton).Caption end; i:=i+1; C:=C.Parent; end; ... Nur bei dem ermitteln der Caption von der TFrom (ActiveFormCaption) weiß ich nicht weiter. :roll: Gruß Crowbar |
Re: Über TWinControl an die "Caption"-Bezeichnung?
Laut Delphi OH ist TControl der gemeinsame Vorfahre, der die Property "Caption" einführt. Da nahezu alle VCL-Controls davon abstammen dürften, die eine Caption haben, reicht es einfach darauf zu casten. (<deinObjekt> as TControl).Caption
Da auch alle Nachfahren einer Klasse geerbte Felder und Properties an den selben Offsets haben, kann man problemlos auf den ersten Vorfahren casten, der die gewünschte Eigenschaft einführt. (Bei Methoden evtl. auf Überladungen achten, wie es damit steht weiss ich gerade nicht genau - für den Fall der Caption aber unerheblich.) Somit wird dein Vorhaben ein 2-Zeiler. |
Re: Über TWinControl an die "Caption"-Bezeichnung?
@Medium:
Wenn ich
Delphi-Quellcode:
benutze, kommt beim Kompilieren die Fehlermeldung:
ActiveContrlName :=(C as TControl).Caption
"Auf protected-Symbol TControl.Caption kann nicht zugegriffen werden." :?: :?: :?: Gruß Crowbar |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz