AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Mehrere Steuerelemente mit der gleichen "Identität"
Thema durchsuchen
Ansicht
Themen-Optionen

Mehrere Steuerelemente mit der gleichen "Identität"

Ein Thema von freddiiii · begonnen am 16. Jul 2009 · letzter Beitrag vom 16. Jul 2009
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#11

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 15:05
Hallo,
Zitat von freddiiii:
was genau meinste oder worauf willste hinnaus?
wird der Button auf TabSheets, Panels etc. gesetzt ?
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#12

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 15:10
Zitat von freddiiii:
Hallo allesamt,

Ich stehe bei einem Projekt momentan vor folgendem Problem:
- Ich habe n-Buttons
- Diese Buttons sollen sich lediglich davon Unterscheiden, wo sie angezeigt werden, sprich im Parent
- Ändere ich bei einem Button eine Eigenschaft, sollen die Eigenschaften aller anderen Buttons ebenfalls angeglichen werden

Nun ist die Frage ob es irgendwie Möglich ist Buttons zu erzeugen, die aber wiederum auf einen "Vater"-Button zeigen, sodass alle die selben Eigenschaften haben und diese auch immer parallel angleichen. Oder geh ich gerade logisch in die falsche Richtung?
Ich bedanke mich schon jetzt für die Antworten
Wenn man jedem Button die gleiche Action Property (aus einer TActionList) zuweist, ändern sich in allen Buttons alle in der Action definierten Eigenschaften gleichzeitig. Es ist also kein Button als Vater definiert, aber die Action in der Actionlist sorgt dafür, dass alle Buttons immer auf die gleiche Art geändert werden (Caption, Hint, Enabled, ...)
Michael Justin
habarisoft.com
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#13

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 15:11
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.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#14

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 15:44
Delphi-Quellcode:
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;
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.
$2B or not $2B
  Mit Zitat antworten Zitat
freddiiii

Registriert seit: 22. Nov 2006
Ort: Bad Hersfeld
25 Beiträge
 
Delphi 2007 Enterprise
 
#15

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 16:01
Zitat von Uwe Raabe:
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.
Die Intention versteh ich, klingt auf jedenfall gut. Ich habe aber selbst nochnie mit Frames gearbeitet und gerade nen bischen rumprobiert. Biste sicher, dass das was du da sagst überhaupt geht? fürn kleines beispiel wär ich sehr dankbar =)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 16:06
Eigentlich dachte ich, daß dann jeder Frame für sich alleine steht und nur das Gleiche vorm Erstellen der Instanz auch gleich ist


Delphi-Quellcode:
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;
und das Ganze nun nur noch für jeden Button aufrufen
Delphi-Quellcode:
CloneObject(Button1, Button2, ['Name', 'Parent', 'Left']);
CloneObject(Button1, Button3, ['Name', 'Parent', 'Left']);
CloneObject(Button1, Button4, ['Name', 'Parent', 'Left']);
Button2 bis Button4 erben nun "alle" Eigenschaften von Button1

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
$2B or not $2B
  Mit Zitat antworten Zitat
freddiiii

Registriert seit: 22. Nov 2006
Ort: Bad Hersfeld
25 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 16:12
Zitat von himitsu:
Eigentlich dachte ich, daß dann jeder Frame für sich alleine steht und nur das Gleiche vorm Erstellen der Instanz auch gleich ist
Deswegen frag ich nochmal nach, weil ich mir das gleiche denk.

Und danke für den Code, aber das ist ja gerade was ich nicht möchte un btw. viel zu umständlich ^^
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#18

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 17:04
Zitat von freddiiii:
Biste sicher, dass das was du da sagst überhaupt geht? fürn kleines beispiel wär ich sehr dankbar =)
Aber klar doch! Bitte schön...

Einfach mal die Eigenschaften des Buttons in Unit2 ändern und schauen, was in Unit1 passiert.
Angehängte Dateien
Dateityp: zip frames_115.zip (3,2 KB, 3x aufgerufen)
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#19

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 18:10
@Uwe:
also die Caption konnte ich ändern, ohne daß sie sich änderte
Miniaturansicht angehängter Grafiken
unbenannt_891.png  
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#20

Re: Mehrere Steuerelemente mit der gleichen "Identität&

  Alt 16. Jul 2009, 19:13
Zitat von himitsu:
@Uwe:
also die Caption konnte ich ändern, ohne daß sie sich änderte
Solange du die Caption in Unit1 nicht geändert hast, sollten alle Änderungen in Unit2 (also im Frame) sofort in das Form übernommen werden - und zwar in beiden Frame-Instanzen. Funktioniert hier tadellos - zumindest zur Design-Time.

- Unit2 in den Form-Designer
- Button1.Caption ändern
- Unit1 in den Form-Designer
- beide Buttons haben neue Caption

Soll ich ein Video machen?

Edit: falls bereits Änderungen in Unit1 gemacht wurden, hilft "geerbte Einstellungen wieder herstellen".
Uwe Raabe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 22:20 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