Entwickler-Ecke
Multimedia / Grafik - Turnierbaum erstellen!
Kronos - Sa 12.04.03 22:55
Titel: Turnierbaum erstellen!
Hallo ihrs!
Folgendes Problem: Wollte ein Programm schreiben, das Ergebnisse von einem Turnier automatisch einliest und in einem Baumdiagramm darstellt. Welche Komponente eignet sich dafür? Treeview ist ungeeignet, da es von klein nach Groß geht und nicht umgekehrt!
THX im vorraus!
Aya - Sa 12.04.03 22:58
Hi,
also ich kenne zwar keine Komponente für soetwas, aber.. ich würde es von hand selber machen.
Hat 2 Vorteile:
- Sieht besser aus, da es absolut frei designbar ist ;)
- Lernst du schön was bei.
Ich würde das ganze wahrscheinlich aus lauter TPanel zusammenbauen...
Falls du nicht weißt wie man ein Panel zur laufzeit erstellt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Panel:=TPanel.Create(self); Panel.Parent:=self; Panel.Width:=100; Panel.Heigh:=60; Panel.Left:=150; Panel.Top:=150; Panel.Caption:='Bla'; |
Jetzt machst du dir am besten einen
Array of TPanel, und erstellst zur laufzeit deine Panels an der entsprechenden Position etc. etc. etc.. ;)
Au'revoir,
Aya~
Aya - Sa 12.04.03 23:00
nochne idee.. ;)
im grunde geht es noch einfacher wenn du das ganze mit Canvas machst, denn dann sind auch die Verbindungslinien kein problem mehr...
Schau mal in der DelphiHilfe nach TCanvas, da stehen alle Zeichenroutinen die es gibt fein aufgelistet.. ;)
Au'revoir,
Aya~
Morduk666 - So 15.06.03 18:46
ohh das passt ja gut. ich bin auch grad dabei eine turnierverwaltung bei mir in mein proggie einzubauen.
schad dass ihr ers am anfang seit :(
aber das mit dem canvas is halt nervig wegen dem draw. wird überschrieben sobald es verdeckt wird. muss man sich um das neu zeichen immer kümmern. bei panels is das problem vom hals. und die verbundungslinien muss man dann eh von hand zeichnen oder nicht ?
Morduk666 - So 15.06.03 20:12
jo ich hab da n kleines prob bei dem createn von den elementen. ich hab da nun ma testhalber buttons genommen. funzt sowiet auch gut. der baum steht. aber wie kann man nun auf die created buttons zugrreifen? also eregnisse abfangen ?
edit:
achja mein testcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TTurnierAnzeigen.TurnierBaumLaden ; var Button: array of TButton ; A : TPoint ; i,x,y , AnzahlSpieler, Runden : integer ; begin AnzahlSpieler := 8 ; if AnzahlSpieler =8 then Runden := 4 ; if AnzahlSpieler =16 then Runden := 5 ; if AnzahlSpieler =42 then Runden := 6 ; if AnzahlSpieler =64 then Runden := 7 ; if AnzahlSpieler =128 then Runden := 8 ; if AnzahlSpieler =256 then Runden := 9 ; if AnzahlSpieler =512 then Runden := 10 ; SetLength(Button, AnzahlSpieler* 10) ;
for y := 0 to Runden -1 do begin A.X := 5 ; A.Y := 30 + (y*26) ; for i := 0 to AnzahlSpieler -1 - (y *2) do begin Button[i]:= TButton.Create(self); Button[i].Parent := self ; Button[i].Top := A.Y + (i*20); if i mod 2 <> 0 then A.Y := A.Y +10 ; Button[i].Left := A.X + (y*130) ; Button[i].Height := 20 ; Button[i].Width := 120 ; Button[i].Caption := 'Spieler ' + inttostr(i); end; end; end; |
Mrax - Mo 16.06.03 18:04
Hallo,
der Zugriff auf die erstellten Objekte und deren Ereignisse ist überhaupt kein Problem. Speicher doch die zu erstellenden Objekte einfach in einer
Liste:
Buttons: TList;
Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure ButtonErzeugen; var Butt: TButton; blablabla... begin Buttons:= TList.Create; for i := 0 to AnzahlSpieler -1 - (y *2) do begin Butt:= TButton.Create(self); Buttons.Add(Butt); TButton(Buttons). Parent := self ; TButton(Buttons). Button[i].Top := A.Y + (i*20); if i mod 2 <> 0 then A.Y := A.Y +10 ; TButton(Buttons). Left := A.X + (y*130) ; TButton(Buttons). Height := 20 ; TButton(Buttons). Width := 120 ; TButton(Buttons). Caption := 'Spieler ' + inttostr(i); TBUTTONS.ONCLICK:= TFORM1.BUTTONCLICK(SENDER); end; end; |
Die Ereignisbehandlung für "TBUTTONS.ONCLICK:= TFORM1.BUTTONCLICK(SENDER);" erstellst du folgender maßen: platziere einen button auf deinem formular. erzeuge eine ereignisbehandlung, die du später für deine anderen buttons benötigst. Bennene diese Prozedur IM OBJEKTINSPEKTOR (auf keinen Fall im Quelltext!!!!!!!) in deinen Wunschnamen um.
Dann kannst du diesen Button wieder löschen, die Ereignisbehandlung bleibt aber erhalten und kann anderen Buttons zugewiesen werden!
Das wars schon!
Wenn du eine genauere Anleitung benötigst, schreib mir direkt eine e-mail an:
moffmarx@aol.com. Mit diesem Problem hatte ich schon oft zu tun.....
mfg
mrax
Mrax - Mo 16.06.03 18:07
Titel: Fehler...
Sorry, habe kleinen Fehler in den Quelltext eingebaut!!!
Hier der richtige:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure ButtonErzeugen; var Butt: TButton; blablabla... begin Buttons:= TList.Create; for i := 0 to AnzahlSpieler -1 - (y *2) do begin Butt:= TButton.Create(self); Buttons.Add(Butt); TButton(Buttons). Parent := self ; TButton(Buttons). Button[i].Top := A.Y + (i*20); if i mod 2 <> 0 then A.Y := A.Y +10 ; TButton(Buttons). Left := A.X + (y*130) ; TButton(Buttons). Height := 20 ; TButton(Buttons). Width := 120 ; TButton(Buttons). Caption := 'Spieler ' + inttostr(i); TBUTTON(TBUTTONS).ONCLICK:= TFORM1.BUTTONCLICK(SENDER); end; end; |
Morduk666 - Di 17.06.03 00:43
oke danke. werd ich abchecken mit dem ereignis sobald ich dazu komm.
bin noch dran an der formel zu basteln die mir korregt den baum ausgibt.
macht bisher noch kleine probs
Morduk666 - Do 19.06.03 00:08
hmmm. also irgendwie mit dem ereignis klapts ned so richtg bei mir bzw garned ;
hab das momentan so :
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| . . . var Button: array of Button ; ButtonID : integer ; . . . Button[ButtonID]:= TButton.Create(self); . . . Button[ButtonID].OnClick := TurnierAnzeigen.ButtonClick(Button[ButtonID]); . . . procedure TTurnierAnzeigen.ButtonClick(Sender: TObject); begin showmessage('joo') ; end; . . . |
bekomm aber immer ne fehlermeldung. :
| Zitat: |
| Inkompatible Typen: 'TNotifyEvent' und 'procedure, untyped pointer or untyped parameter' |
also weis ned ob ich ne kleinigkeitz übersehn hab oder so.. also auf alle fälle muss ich da später in der ereignisroutine wissen welcher button gedrückt wurde. wie kann ich dann den herausfinden? also z.B. wie bei meinem besipiel dann die buttonID oder die Caption des Buttons der gedrückt wurde.
Morduk666 - Do 19.06.03 01:32
oke hat sich erledigt zwecks ereignis ersma.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!