| Autor |
Beitrag |
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 25.07.09 03:06
Die beiden Vorredner, die Dir eine Neue Button-Klasse angeboten haben, haben durchaus recht, dass dies der beste Weg ist, weil Du
a) die Klassen-Instanzen eh dynamisch erzeugst
b) Du keine extra Liste brauchst um die zusätzlichen Eigenschaften der Buttons denselbigen zuzuordnen.
Was Du sicherlich nicht brauchst, sind Set/Get-Funktionen für properties. Wahscheinlich brauchst Du nichtmal properties, wenn Du nicht gerade etwas auf das setzen/lesen hin ausführen willst.
Also das einfachste, was ich mir da vorstellen kann :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| Type TMyButton = class(TButton) public ExtraInteger1 : Integer; ExtraInteger2 : Integer; ExtraString1 : String; ExtraString2 : String; end; |
Nun hast Du schon eine Button-Klasse, die macht alles, wie deine normalen Buttons, hat aber 4 zusätzliche Felder, wo Du was für jeden Button speichern kannst.
Beim Erzeugen brauchst Du nur die Klassen jeweils von TButton auf TMyButton ändern und während des Einlesens kannst Du die extrawerte in diese neuen variablen-Felder speichern.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| FMyButton := TMyButton.Create(Self); FMyButton.ExtraInteger := 5; FMyButton.ExtraString := 'TestString'; FMyButton.Height := 25; FMyButton.Name := 'Button1'; FMyButton.Caption := 'Drück mich ganz lieb' |
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: Sa 25.07.09 18:01
Hey HelgeLange,
brauch man für deinen Vorschlag keine TObjectList, reicht es einfach so?
Ich habe oben die ganze Procedure gepostet, wie es später aussehen sollte.
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 25.07.09 18:30
Naja, Du hattest ja Dein Button array.
Ich selbst bevorzuge Listen, das würde dann so aussehen :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| var FMyButtons : TList; MyButton : TMyButton; begin For i := 1 To ButtonCount Do begin MyButton := TMyButton.Create(Self); MyButton.Top := 23; ... MyButton.ExtraInteger1 := 15; ... FMyButtons.Add(MyButton); MyButton.OnClick := MyOnClick; end; end; |
Zum Zugreifen auf einen Button einfach aus der Liste raus drauf zugreifen mit einem TypeCast :
Delphi-Quelltext 1:
| TMyButton(FMyButtons.Items[idx]).ExtraInteger1 := 444; |
und später beim Programm beenden einfach alle freigeben
Delphi-Quelltext 1: 2: 3: 4: 5:
| While FMyButtons.Count > 0 Do begin TMyButton(FMyButtons.Items[0]).Free; FMyButtons.Delete(0); end; FreeAndNil(FMyButtons); |
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: Sa 25.07.09 18:43
Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:20, insgesamt 1-mal bearbeitet
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 25.07.09 20:17
So wie ich das im ersten QuellCode sehe, erzeigst Du den Button in gibst ihn am Ende wieder frei. Ist das so gewollt ?
Normalerweise solltest Du, wenn die Buttons während der ganzen Laufzerit des Programms da sein sollten, beim FormCreate oder FormShow-event die Buttons erzeugen und mit dem Eigenschaften belegen, die Du aus deiner Datei liest.
Das kannst Du mit dem ersten QuellCode meines Beispiels machen.
Im OnClick-Event kannst Du einfach den Sender jeweils Typecasten und entsprechend auswerten anhand der Eigenschaften, was Du im OnClick machen sollst
Delphi-Quelltext 1:
| TMyButton(Sender).ExtraInteger1 := 12; |
und im FormClose- oder FormDestroy-Event kannst Du die Liste freigeben, wie ich es Dir gezeigt hatte.
Weiteren Zugriff brauchast Du wahrscheinlich nichtmal auf die Buttons in der Liste selbst, da sie sich wahrscheinlich nicht während der Laufzeit ändern ausser im OnClick-Event. Also ignorier die Liste soweit, dass Du sie erzeugst, die Buttons drin ablegst und am Ende durchgehst und die Buttons freigibst.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: Sa 25.07.09 21:45
Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:20, insgesamt 1-mal bearbeitet
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Sa 25.07.09 22:41
Einmal im FormShow oder FormCreate Event musst Du die Liste erzeugen
Delphi-Quelltext 1: 2: 3:
| begin FMyButtons := TList.Create; end; |
und der Code zum leeren der Liste und das Freigeben muss im FormClose oder FormDestroy stehen.
Ich hoffe doch mal, dass Du weisst, wie Du Events belegst 
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: So 26.07.09 09:51
Zuletzt bearbeitet von Major1337 am Di 28.07.09 17:20, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 26.07.09 12:20
Darf man fragen, wieso jetzt eine TList statt einer TObjectlist zum Einsatz kommt?
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: So 26.07.09 12:34
Mir ist es ehrlich gesagt egal ob es ein TList oder TObjectList ist, ihr wisst doch wie es geht, könnt ihr mir es bitte machen.
Ich glaube ich habe euch schon genug Eigeninitiative gezeigt.
Bitte 
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 26.07.09 13:11
Wir haben Dir das Rüstzeug doch bereits gegeben: Du hast nun einen Button mit erweiterten Eigenschaften sowie eine Liste zur Verwaltung von Instanzen dieses Buttons. Mehr brauchst Du doch nicht.
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: So 26.07.09 17:25
mit events belegen meinte ich die FormCreate/FormDestroy des Forms, das ButtonEvent hast Du doch schon
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Major1337 
      
Beiträge: 29
|
Verfasst: So 26.07.09 19:08
ohh man solangsam bekomme ich Kopfweh von den TList oder TObjectList. Ich weiß einfach nicht wie ich das machen soll, das mit der Buttonklasse kann ich noch nachvollziehen. Könnt ihr mir Bitte diese Arbeit, die für euch sehr wahrscheinlich leicht erscheint machen. Ich bin ich euch so dankbar, wenn ihr das für mich macht!!
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mo 27.07.09 02:01
| Zitat: | Da ich aber jetzt ein mehrwöchiges Praktikum absolvieren muss und in unserer Umgebung leider keine Firmen gab
...
Könnt ihr mir Bitte diese Arbeit, die für euch sehr wahrscheinlich leicht erscheint machen. Ich bin ich euch so dankbar, wenn ihr das für mich macht!! |
Wir sind ja nicht dazu da, Dir Deine Praktikumsarbeit zu machen, das wäre nicht der Sinn der ganzen Übung.
Wie man die TList macht, hab ich Dir geschrieben, das wirst Du Dir schon selbst in den Code kopieren müssen, wo, habe ich Dir auch gesagt.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
Narses
      

Beiträge: 10184
Erhaltene Danke: 1259
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mi 29.07.09 11:31
Moin!
Thread wegen Vandalismus gesperrt, Rückfragen per VA ans Team.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|