AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Über TWinControl an die "Caption"-Bezeichnung?
Thema durchsuchen
Ansicht
Themen-Optionen

Über TWinControl an die "Caption"-Bezeichnung?

Ein Thema von Crowbar · begonnen am 29. Mär 2008 · letzter Beitrag vom 30. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#1

Über TWinControl an die "Caption"-Bezeichnung?

  Alt 29. Mär 2008, 14:16
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 29. Mär 2008, 14:20
Du musst es zu einem Klassentyp casten, welcher die Eigenschaft hat.
Markus Kinzler
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#3

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

  Alt 29. Mär 2008, 20:36
@mkinzler:
Was meinst Du mit "casten"?
Hast Du ein Beispiel dafür?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 29. Mär 2008, 20:37
ActiveContrlCaption:=(C as TButton).Caption;
Markus Kinzler
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#5

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

  Alt 29. Mär 2008, 20:54
Danke, so klappt es!
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#6

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

  Alt 29. Mär 2008, 21:22
Ich bin ich es doch noch einmal...
Zitat von mkinzler:
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

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

  Alt 29. Mär 2008, 21:27
Du könntest es vorher mit

if c is TButton then
Markus Kinzler
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#8

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

  Alt 30. Mär 2008, 00:35
Zitat von mkinzler:
Du könntest es vorher mit
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 = 'TButtonthen 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.

Gruß
Crowbar
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#9

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

  Alt 30. Mär 2008, 04:40
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Crowbar

Registriert seit: 17. Jun 2002
43 Beiträge
 
#10

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

  Alt 30. Mär 2008, 13:44
@Medium:
Wenn ich
ActiveContrlName :=(C as TControl).Caption benutze, kommt beim Kompilieren die Fehlermeldung:
"Auf protected-Symbol TControl.Caption kann nicht zugegriffen werden."



Gruß
Crowbar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:43 Uhr.
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