Re: Anzahl Formulare in der Applikation
Hi,
um heruaszufinden ob ein Objekt eine Property hat, habe ich hier im Forum mal was gefunden gehabt:
Delphi-Quellcode:
HTH
uses
TypInfo; [...] function HasProperty(AClass : TObject; APropertyName : String) : Boolean; var MyPropInfo: PPropInfo; begin MyPropInfo := GetPropInfo(AClass.ClassInfo, APropertyName); Result := MyPropInfo <> NIL; end; procedure TForm1.btnClick(Sender: TObject); begin if HasProperty(MeinObjekt, 'Caption') then begin end; end; Ansgar |
Re: Anzahl Formulare in der Applikation
Abgesehen davon verstehe ich nicht, wieso 2 Schleifen nacheinander abgearbeitet werden.
Zitat:
|
Re: Anzahl Formulare in der Applikation
Und so wird der Code immer schöner.
HasProperty ist zwar super, allerdings hilft mir das nicht weite.
Delphi-Quellcode:
if handleList.Count = 0 then
begin for j := 0 to screen.FormCount-1 do begin for i := 0 to screen.Forms[j].ComponentCount-1 do begin comp := screen.Forms[j].Components[i]; comp.Tag := ((j+1) * 10000) + i; if comp is TButton then handleList.Add(IntToStr(comp.Tag)+'='+TButton(comp).Caption); if comp is TToolButton then handleList.Add(IntToStr(comp.Tag)+'='+TToolButton(comp).Caption); if comp is TLabel then handleList.Add(IntToStr(comp.Tag)+'='+TLabel(comp).Caption); if comp is TMenuItem then handleList.Add(IntToStr(comp.Tag)+'='+TMenuItem(comp).Caption); if comp is TCheckBox then handleList.Add(IntToStr(comp.Tag)+'='+TCheckBox(comp).Caption); if comp is TRadioButton then handleList.Add(IntToStr(comp.Tag)+'='+TRadioButton(comp).Caption); if comp is TTabSheet then handleList.Add(IntToStr(comp.Tag)+'='+TTabSheet(comp).Caption); if comp is TSpeedButton then handleList.Add(IntToStr(comp.Tag)+'='+TSpeedButton(comp).Caption); end; // for i = components end; // for j = forms end; // if list is empty Das Problem bleibt bestehen, dass ich in Delphi (bisher) keine Möglichkeit gefunden habe, Klassen dynamisch zuzuweisen, z.B. so: TClass('TLabel').Caption oder TClass(comp.ClassName).Caption Das kann in Delphi nie klappen, da man sofort die Klassentypen benötigt um auf etwas zuzugreifen. Es wird nicht einfach compiliert in der Hoffnung der User weiß genau was er da gerade zusammenbaut. Ideen? |
Re: Anzahl Formulare / Dynamisch Klassen ansprechen?
Basierend auf obigem Code habe ich mal diese Funktion gebastelt:
Delphi-Quellcode:
Damit sollte es gehen.
function CompHasCaption(AClass : TObject; out sResult: string): Boolean;
const sProp = 'Caption'; var MyPropInfo: PPropInfo; begin sResult := ''; MyPropInfo := GetPropInfo(AClass.ClassInfo, sProp); Result := Assigned(MyPropInfo); if Result then sResult := GetPropValue(AClass, sProp); end; |
Re: Anzahl Formulare / Dynamisch Klassen ansprechen?
Delphi-Quellcode:
if handleList.Count = 0 then
begin for j := 0 to screen.FormCount-1 do for i := 0 to screen.Forms[j].ComponentCount-1 do begin comp := screen.Forms[j].Components[i]; comp.Tag := ((j+1) * 10000) + i; if (CompHasCaption(Comp, s)) then handleList.Add(IntToStr(comp.Tag)+'='+s); end; // for i = components end; // if list is empty Wie wenig code das nur noch ist ;) VIELEN lieben Dank, hat mich viele Nerven gekostet. Für alle die noch was setzen wollen, so gehts:
Delphi-Quellcode:
function CompSetCaption(AClass : TObject; Caption: string): Boolean;
const sProp = 'Caption'; var MyPropInfo: PPropInfo; begin MyPropInfo := GetPropInfo(AClass.ClassInfo, sProp); Result := Assigned(MyPropInfo); if Result then begin SetPropValue(AClass, sProp, Caption); result := true; end else result := false; end; |
Re: Anzahl Formulare / Dynamisch Klassen ansprechen?
Kleiner Verbesserungsvorschlag:
Delphi-Quellcode:
function CompSetCaption(AClass : TObject; const Caption: string): Boolean;
const sProp = 'Caption'; var MyPropInfo: PPropInfo; begin MyPropInfo := GetPropInfo(AClass.ClassInfo, sProp); Result := Assigned(MyPropInfo); if Result then SetPropValue(AClass, sProp, Caption); end; |
Re: Anzahl Formulare / Dynamisch Klassen ansprechen?
Vielen Dank, habs allesamt mal für die codelib vorgeschlagen :)
Sehr sehr praktisch. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:06 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