![]() |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Hallo,
Zitat:
|
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Zitat:
|
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Ist vielleicht etwas oversized, aber sollte genau das tun, was du willst: Erzeuge einen neuen TFrame, leg den Button drauf und instanziere den Frame mehrfach auf deinem Form. Wenn du jetzt die Eigenschaften des Buttons im Frame änderst, erben das alle Instanzen des Frames.
|
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Delphi-Quellcode:
allerdings müßte tkClass noch etwas geändert werden, also speziell für Klassen, welche zum Objekt gehören und wo nur deren Inhalt kopiert werden müßte und nicht nur deren Referenz.
Procedure Clone(C, C2: TObject);
Var List: PPropList; i, i2: Integer; Begin i2 := GetPropList(C.ClassInfo, List); If i2 > 0 Then Try For i := 0 to i2 - 1 do If IsStoredProp(C, List[i].Name) and not MatchText(List[i].Name, ['Name', 'Parent']) Then Case List[i].PropType^.Kind of tkInteger, tkEnumeration, tkChar, tkWChar: SetOrdProp (C2, List[i].Name, GetOrdProp (C, List[i].Name)); tkInt64: SetInt64Prop (C2, List[i].Name, GetInt64Prop (C, List[i].Name)); tkSet: SetSetProp (C2, List[i].Name, GetSetProp (C, List[i].Name)); tkFloat: SetFloatProp (C2, List[i].Name, GetFloatProp (C, List[i].Name)); tkLString: SetAnsiStrProp (C2, List[i].Name, GetAnsiStrProp (C, List[i].Name)); tkWString: SetWideStrProp (C2, List[i].Name, GetWideStrProp (C, List[i].Name)); {$IF Declared(UnicodeString)} tkString, tkUString: GStUnicodeStrProp(C2, List[i].Name, GetUnicodeStrProp(C, List[i].Name)); {$ELSE} tkString: SetAnsiStrProp (C2, List[i].Name, GetAnsiStrProp (C, List[i].Name)); {$IFEND} tkClass: SetObjectProp (C2, List[i].Name, GetObjectProp (C, List[i].Name)); tkMethod: SetMethodProp (C2, List[i].Name, GetMethodProp (C, List[i].Name)); tkVariant: SetVariantProp (C2, List[i].Name, GetVariantProp (C, List[i].Name)); Else Raise Exception.Create('Propertytyp wird nicht unterstützt'); End; Finally FreeMem(List); End; End; |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Zitat:
|
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Eigentlich dachte ich, daß dann jeder Frame für sich alleine steht und nur das Gleiche vorm Erstellen der Instanz auch gleich ist :gruebel:
Delphi-Quellcode:
und das Ganze nun nur noch für jeden Button aufrufen
Procedure CloneObject(O, O2: TObject; Const Ignore: Array of String);
Var List: PPropList; i, i2: Integer; Begin i2 := GetPropList(O.ClassInfo, List); If i2 > 0 Then Try For i := 0 to i2 - 1 do If IsStoredProp(O, List[i].Name) and not MatchText(List[i].Name, Ignore) Then Case List[i].PropType^.Kind of tkInteger, tkEnumeration, tkChar, tkWChar: SetOrdProp (O2, List[i].Name, GetOrdProp (O, List[i].Name)); tkInt64: SetInt64Prop (O2, List[i].Name, GetInt64Prop (O, List[i].Name)); tkSet: SetSetProp (O2, List[i].Name, GetSetProp (O, List[i].Name)); tkFloat: SetFloatProp (O2, List[i].Name, GetFloatProp (O, List[i].Name)); tkLString: SetAnsiStrProp (O2, List[i].Name, GetAnsiStrProp (O, List[i].Name)); tkWString: SetWideStrProp (O2, List[i].Name, GetWideStrProp (O, List[i].Name)); {$IF Declared(UnicodeString)} tkString, tkUString: SetUnicodeStrProp(O2, List[i].Name, GetUnicodeStrProp(O, List[i].Name)); {$ELSE} tkString: SetAnsiStrProp (O2, List[i].Name, GetAnsiStrProp (O, List[i].Name)); {$IFEND} tkClass: If MatchText(List[i].Name, ['CustomHint', 'Action', 'DropDownMenu', 'Images', 'PopupMenu']) Then SetObjectProp (O2, List[i].Name, GetObjectProp (O, List[i].Name)) Else If (GetObjectProp(O, List[i].Name) is TPersistent) and ( GetObjectProp(O2, List[i].Name) is TPersistent) Then TPersistent(GetObjectProp(O2, List[i].Name)).Assign(GetObjectProp(O, List[i].Name) as TPersistent); tkMethod: SetMethodProp (O2, List[i].Name, GetMethodProp (O, List[i].Name)); tkVariant: SetVariantProp (O2, List[i].Name, GetVariantProp (O, List[i].Name)); Else Raise Exception.Create('Propertytyp wird nicht unterstützt'); End; Finally FreeMem(List); End; End;
Delphi-Quellcode:
Button2 bis Button4 erben nun "alle" Eigenschaften von Button1
CloneObject(Button1, Button2, ['Name', 'Parent', 'Left']);
CloneObject(Button1, Button3, ['Name', 'Parent', 'Left']); CloneObject(Button1, Button4, ['Name', 'Parent', 'Left']); wenn du nun die Buttons alle in einer Liste hast, oder diese über die Form suchst, dann kannst'e diese Funktion auch in einer Schleife aufrufen |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Zitat:
Und danke für den Code, aber das ist ja gerade was ich nicht möchte un btw. viel zu umständlich ^^ |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Einfach mal die Eigenschaften des Buttons in Unit2 ändern und schauen, was in Unit1 passiert. |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Liste der Anhänge anzeigen (Anzahl: 1)
@Uwe:
also die Caption konnte ich ändern, ohne daß sie sich änderte |
Re: Mehrere Steuerelemente mit der gleichen "Identität&
Zitat:
- Unit2 in den Form-Designer - Button1.Caption ändern - Unit1 in den Form-Designer - beide Buttons haben neue Caption Soll ich ein Video machen? :wink: Edit: falls bereits Änderungen in Unit1 gemacht wurden, hilft "geerbte Einstellungen wieder herstellen". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz