Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Über TWinControl an die "Caption"-Bezeichnung? (https://www.delphipraxis.net/111097-ueber-twincontrol-die-caption-bezeichnung.html)

Crowbar 29. Mär 2008 14:16


Über TWinControl an die "Caption"-Bezeichnung?
 
Hallo,
Delphi-Quellcode:
...
Var
 C                                  : TWinControl;
 ActiveContrlClass,ActiveContrlName,
 ActiveContrlCaption                : String;

begin
  ...
  ActiveContrlClass:=C.ClassName;
  ActiveContrlName :=C.Name;
  ActiveContrlCaption:=C. ... ?
  ...
end;
Ergebnis:
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

mkinzler 29. Mär 2008 14:20

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Du musst es zu einem Klassentyp casten, welcher die Eigenschaft hat.

Crowbar 29. Mär 2008 20:36

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
@mkinzler:
Was meinst Du mit "casten"?
Hast Du ein Beispiel dafür?

mkinzler 29. Mär 2008 20:37

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Delphi-Quellcode:
ActiveContrlCaption:=(C as TButton).Caption;

Crowbar 29. Mär 2008 20:54

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Danke, so klappt es! :-D

Crowbar 29. Mär 2008 21:22

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Ich bin ich es doch noch einmal...
Zitat:

Zitat von mkinzler
Delphi-Quellcode:
ActiveContrlCaption:=(C as TButton).Caption;

... aber etwas Schwieriger wird es sein, wenn ich nicht weiß, ob es gerade TButton, TForm usw. ist oder?

Delphi-Quellcode:
...
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;
Gruß
Crowbar

mkinzler 29. Mär 2008 21:27

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Du könntest es vorher mit

Delphi-Quellcode:
if c is TButton then

Crowbar 30. Mär 2008 00:35

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
Zitat:

Zitat von mkinzler
Du könntest es vorher mit
Delphi-Quellcode:
if c is TButton then

Ja, so klappt es!
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:
ActiveContrlCaption:=(C as TButton).Caption;
z.B. ActiveFormCaption:=(C as TForm).Caption; <= klappt aber nicht?
vorgehen?

Delphi-Quellcode:
...
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;
...
... hiermit bin ich soweit, dass diese Funktion (s. oben) alles ausgibt, was ich möchte.
Nur bei dem ermitteln der Caption von der TFrom (ActiveFormCaption) weiß ich nicht weiter. :roll:

Gruß
Crowbar

Medium 30. Mär 2008 04:40

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.

Crowbar 30. Mär 2008 13:44

Re: Über TWinControl an die "Caption"-Bezeichnung?
 
@Medium:
Wenn ich
Delphi-Quellcode:
ActiveContrlName :=(C as TControl).Caption
benutze, kommt beim Kompilieren die Fehlermeldung:
"Auf protected-Symbol TControl.Caption kann nicht zugegriffen werden."

:?: :?: :?:

Gruß
Crowbar


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz