AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Typecast ohne Typ zu kennen?

Ein Thema von alcaeus · begonnen am 24. Mai 2005 · letzter Beitrag vom 29. Mai 2005
Antwort Antwort
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#1

Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 10:08
Hallo,

ich habe wieder mal vor, die Delphi-Language ein bisschen zu vergewaltigen. Und zwar will ich diesmal einen Typecast durchführen, ohne den Typ zu kennen auf den ich caste

Aber ein paar Erklärungen: es geht um die Set-Routine eines Language-Systems, dem ich nur einen Eintrag sowie eine Komponente als TComponent übergebe. Der Eintrag enthält die Caption und einen evtl. Hint für die Komponente in der jeweiligen Sprache, sowie zwei Booleans die abspeichern, ob die Komponente eine Caption bzw. einen Hint erhalten soll.
Nun zu meinem Problem: Ich kann nicht davon ausgehn, dass ich alle Komponenten erfassen kann, und ich muss ja auf etwas casten. Jetzt dachte ich mir "ok, Caption ist in TControl deklariert, caste nach TControl und fertig is", aber ich hab die Rechnung wohl ohne Borlands geile Strategie gemacht, erstmal alles als protected zu deklarieren Was heißt das? Ja, dass erst TButton die property "Caption" als published deklariert, und man vorher keine Chance hat, drauf zuzugreifen.

Lange Rede kurzer Sinn: wie kann ich anhand von ClassName oder ClassType casten? Ich hab im Moment solche Konstrukte:
Delphi-Quellcode:
if Comp.ClassName = 'TButtonthen
begin
  TButton(Comp).Caption := '';
  TButton(Comp).Caption := '';
end
else if Comp.ClassName = //und so weiter
Kennt jemand einen anderen Weg? Ich lauf hier gegen eine Wand.

Greetz
alcaeus

PS: Den ClassName habe ich verwendet, da ich Probleme hatte, den ClassType auszulesen, wenn das Form aus einer DLL kommt (ja, da wären wir wieder bei meinem Standardproblem der letzten 2 Monate )
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 10:16
Hast Du dir schon mal die Funktionen in der Unit TypeInfo.pas angesehen. Z.B. GetPropInfo, SetStrProp und ähnliche.
Damit kannst Du auch auf Nicht-Published-Properties zugreifen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 10:20
Zitat von alcaeus:
Jetzt dachte ich mir "ok, Caption ist in TControl deklariert, caste nach TControl und fertig is", aber ich hab die Rechnung wohl ohne Borlands geile Strategie gemacht, erstmal alles als protected zu deklarieren Was heißt das? Ja, dass erst TButton die property "Caption" als published deklariert, und man vorher keine Chance hat, drauf zuzugreifen.
Delphi-Quellcode:
type
  TMyControl = class(TControl)
  published
    property Caption;
  end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  TMyControl(Sender).Caption := 'Hello World!';
end;
Delphi-Quellcode:
procedure TForm1.Label1Click(Sender: TObject);
begin
  TMyControl(Sender).Caption := 'Hello World!';
end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 10:32
und das funktioniert? auch wenn TButton gar nicht von TMyControl abstammt?
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#5

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 10:38
Zitat von DGL-luke:
und das funktioniert? auch wenn TButton gar nicht von TMyControl abstammt?
Jupp, das funktioniert. Vielen Dank.

@Bernhard: könntest du bitte das mit GetPropInfo bei Gelegenheit näher erläutern? Ich blick da noch nicht ganz durch. Der andere Weg funktioniert aber schon mal

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 11:07
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
const
  S_CAPTION = 'Caption';
var
  Count: Integer;
  PropList: PPropList;
  I: Integer;
begin

  Count := GetPropList(Sender, PropList);
  if Count > 0 then
  begin
    for I := 0 to Count - 1 do
      if PropList[I].Name = S_CAPTION then
        if PropList[I].PropType^.Kind = tkLString then
        begin
          SetStrProp(Sender, S_CAPTION, 'Hello World!');
          Break;
        end;
    FreeMem(PropList);
  end;

end;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Typecast ohne Typ zu kennen?

  Alt 24. Mai 2005, 14:17
Hi,

hier eine etwas kürzere Variante:
Delphi-Quellcode:
// uses TypInfo;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsPublishedProp(Sender, 'Caption') then
    SetStrProp(Sender, 'Caption', 'Hello World');
end;
mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Typecast ohne Typ zu kennen?

  Alt 29. Mai 2005, 23:10
Hallo ihr,

danke fuer eure Tipps. Ich werde mir alles in den naechsten Tagen ansehn, und evtl. weiterfragen. Bis dahin kann ich ja sagen, dass ich noch was gefunden habe, was so ziemlich das ist was ich will: Delphi-Referenz durchsuchenGetClass.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:33 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