Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Code vereinfachen (obj as Tbutton) (https://www.delphipraxis.net/148130-code-vereinfachen-obj-tbutton.html)

R2009 23. Feb 2010 10:52


Code vereinfachen (obj as Tbutton)
 
Hi,
ich möchte auf all diese Objekte zugreifen ohne die vielen ifs:
Alle haben das Property caption gemeinsam.
Hat jemand eine Idee wie man das vereinfachen kann?
Am liebsten wäre mir obj.caption:='tralala'.

Delphi-Quellcode:
    (sender as tform).GetTabOrderList(List);
    //detect all controls.
    For n:=0 to list.Count-1 do
      begin
        obj:=list.Items[n];
        If (obj is Tbutton) then
           begin
            (obj as Tbutton).caption:='huhu';
           end;
        If (obj is Tradiobutton) then
           begin
             (obj as Tradiobutton).caption:='huhu';
           end;
        If (obj is Tcheckbox) then
           begin
             (obj as Tcheckbox).caption:='huhu';
           end;
       end;
Grüsse
Rainer

himitsu 23. Feb 2010 10:58

Re: Code vereinfachen (obj as Tbutton)
 
Dann schau einfach in welchem gemeinsamen Vorfahr das Property Caption eingeführt/veröffentlicht wurde und nutze dann diesen.

DeddyH 23. Feb 2010 10:58

Re: Code vereinfachen (obj as Tbutton)
 
Versuch mal
Delphi-Quellcode:
if obj is TControl then
  TControl(obj).Caption := 'Blabla';
Ohne Gewähr

Amateurprofi 23. Feb 2010 11:04

Re: Code vereinfachen (obj as Tbutton)
 
versehentlich abgeschickt.....

R2009 23. Feb 2010 11:09

Re: Code vereinfachen (obj as Tbutton)
 
Hi himits, hi DeddyH,

glaubt ihr wirklich ich hätte diesen Thread geöffnet wenn ich das nicht schon ausprobiert hätte?

Hat jemand eine sinnvolle andere Idee?

Grüsse
Rainer

DeddyH 23. Feb 2010 11:18

Re: Code vereinfachen (obj as Tbutton)
 
Und wieso sagst Du uns das nicht? Dann schau mal hier.

himitsu 23. Feb 2010 11:25

Re: Code vereinfachen (obj as Tbutton)
 
Code:
TButton     > TCustomButton  > TButtonControl > TWinControl > TControl > ...
TRadioButton                  > TButtonControl > TWinControl > TControl > ...
TCheckBox   > TCustomCheckBox > TButtonControl > TWinControl > TControl > ...
Caption wurde in TControl eingeführt, aber noch nicht veröffentlich (protected).
Veröffentlicht (public/published) wurde es erst in den Endtypen.

Da alle Typen den selben Vorfahren haben, wo diese Option eingeführt wurde, kann man nun irgendeinen Typen nehmen, wo es veröffentlicht wurde, da dieses Property, bzw. sein Speicherplatz/Zugriff sich nicht verändert

Delphi-Quellcode:
If (obj is TButton) or (obj is TRadioButton) or (obj is TCheckBox) then
  TButton(obj).Caption := 'huhu';
Der nächste gemeinsame Vorfahr wär TCustomButton:
Delphi-Quellcode:
If obj is TCustomButton then
  TButton(obj).Caption := 'huhu';
Folgendes würde jetzt für alle Typen, welche von TControl abgeleitet wurden die Caption ändern.
Delphi-Quellcode:
If obj is TControl then
  TButton(obj).Caption := 'huhu';
Hab hier intern einfach TButton genommen, da es TCustomButton logisch am Nächsten steht und schön kurz ist.


Delphi-Quellcode:
Type TCustomButtonCaptionAccesss = Class(TCustomButton)
  Public // oder Protected, wenn diese Deklaration in der gleichen Unit deklariert
    Property Caption;                   // wird, wo man auch drauf zugreifen will
  End;

If obj is TCustomButton then
  TCustomButtonCaptionAccesss(obj).Caption := 'huhu';

uligerhardt 23. Feb 2010 12:29

Re: Code vereinfachen (obj as Tbutton)
 
Zitat:

Zitat von DeddyH
Versuch mal
Delphi-Quellcode:
if obj is TControl then
  TControl(obj).Caption := 'Blabla';
Ohne Gewähr

Fast. So geht's:
Delphi-Quellcode:
type
  THack_Control = class(TControl);

procedure Test(obj: TObject);
begin
  if obj is TControl then
    THack_Control(obj).Caption := 'Blabla';
end;

uligerhardt 23. Feb 2010 12:31

Re: Code vereinfachen (obj as Tbutton)
 
Zitat:

Zitat von R2009
glaubt ihr wirklich ich hätte diesen Thread geöffnet wenn ich das nicht schon ausprobiert hätte?

Woher sollen wir das wissen? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:29 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