Delete - Do 25.06.09 21:22
Titel: Zugriff auf Combobox, wenn onChange dynamisch zugewiesen
Hallo Leute,
versuche gerade Mastermind zu programmieren und erstell dafür dynamisch (,weil ich will das so) die Comboboxen dafür. ^^
Problem bei der Sache ist jetzt nur, dass er die onChange-Funktion nicht so übernimmt, dass er auf sich selber zu greifen kann bzw. ich einfach nicht wirklich weiß, wie das geht xD
Ich hab's mal geschafft gehabt, warum weiß ich aber nicht genau.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| for i := 0 to code_laenge- 1 do begin combobox[i] := Tcombobox.Create(self); combobox[i].Parent:= Form1; combobox[i].Top := 20; combobox[i].Left := round(((Form1.Width/code_laenge +10)*i)+10); combobox[i].OnChange:= farbeAuswaehlen; for x := 0 to anzahl_farben - 1 do combobox[i].Items.Add(farben[x])
end; |
Damit werden also nun die Comboboxen erstellt und die Farben zugewiesen (farben['rot', 'gelb', 'blau', 'grün']).
Die "farbenAuswaehlen"-Prozedur:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.farbeAuswaehlen(Sender: TObject); var combobox : Tcombobox; begin versuch[0] := farben[combobox.ItemIndex] ; end; |
So. Wie ihr seht, gibt es da noch ein weiteres Problem.
Ich muss die Position in dem Array versuch auch noch genau durch die Combobox ermitteln lassen. Also die zuerst kreirte Combobox soll bei einer Änderung versuch[0] definieren und die z.B. 3. dann eben versuch[3]. Allerdings weiß ich da noch weniger, wo ich ansetzen soll ^^
Achja, hab vergessen zu erwähnen, dass versuch als private Variable gesetzt ist und dass wenn ich die Combobox ändere, da ein Zugriffsfehler kommt.
Habt ihr da ein paar Tipps für mich?
Gr33tZ
Rn
Xentar - Do 25.06.09 21:49
Schnelle Lösung:
beim Erzeugen noch hinzufügen
und dann
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.farbeAuswaehlen(Sender: TObject); var Combobox: TCombobox; begin ComboBox := Sender as TComboBox; Versuch[Combobox.Tag] := farben[combobox.ItemIndex]; end; |
so in der Art.
Weiß grad aber nicht, ob das die eleganteste Variante ist
Delete - Do 25.06.09 22:33
Danke dir. Hat funktioniert.
Noch ein paar Fragen ^^
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm1.Button1Click(Sender: TObject); var i :integer; versuch2 : string; begin for i := 0 to length(versuch) - 1 do versuch2 := versuch2 + ' ' + versuch[i];
listbox1.Items.Add('Versuch: '+ versuch2); end; |
gibt es eine elegantere Variante als immer "versuch2 + versuch[i]"? Also z.B. "versuch2 .= versuch[i]" so wie in PHP ?
Und:
Hat jemand jetzt noch eine Idee, wie ich am besten die geratenen Farben darstellen kann?
Also ich hab's in einer Listbox versucht, aber ich kann ja nicht von jedem einzelnen String die Farbe ändern (oder?).
Mit Checkboxen und Radiobuttons funktioniert das auch nicht, weil die Farbe irgendwie nicht wirklich zugewiesen wird, also ich verändere sie, aber die Erscheinung ändert sich kein bisschen.
Joar. ich denke, das war's dann an diesem Punkt ^^
Narses - Do 25.06.09 22:47
Moin!
regsnerven hat folgendes geschrieben : |
Noch ein paar Fragen ^^
[...]
gibt es eine elegantere Variante als immer "versuch2 + versuch[i]"? Also z.B. "versuch2 .= versuch[i]" so wie in PHP ? |
Nein, das kennt Delphi nicht.
Für die restlichen Fragen ist jetzt aber definitiv ein neuer Thread fällig. :|
cu
Narses