Autor Beitrag
Kronos
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 12.04.03 22:55 
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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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:
  1. Sieht besser aus, da es absolut frei designbar ist ;)
  2. 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:
ausblenden 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
I aim for my endless dreams and I know they will come true!
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: 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~

_________________
Aya
I aim for my endless dreams and I know they will come true!
Morduk666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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:

ausblenden volle Höhe 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 ;    // ersma festen wert zum testen
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  ;     // oben/links X
  A.Y := 30 + (y*26)  ;
   for i := 0 to AnzahlSpieler -1 - (y *2do
    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 ;  // bei jedem 2. mehr abstand lassen
      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
Hält's aus hier
Beiträge: 7



BeitragVerfasst: 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:

ausblenden 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 *2do 
    begin 
      Butt:= TButton.Create(self); //lokale Variable Butt
      Buttons.Add(Butt);  // In Liste eintragen;
      TButton(Buttons). Parent := self ; 
      TButton(Buttons). Button[i].Top := A.Y  +  (i*20); 
        if i mod 2 <> 0 then A.Y := A.Y +10 ;  // bei jedem 2. mehr abstand lassen 
      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

_________________
Bei e-mails an Privatadresse bitte "Delphi Forum" als BETREFF angeben!
Mrax
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Mo 16.06.03 18:07 
Titel: Fehler...
Sorry, habe kleinen Fehler in den Quelltext eingebaut!!!

Hier der richtige:

ausblenden 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 *2do 
    begin 
      Butt:= TButton.Create(self); //lokale Variable Butt 
      Buttons.Add(Butt);  // In Liste eintragen; 
      TButton(Buttons). Parent := self ; 
      TButton(Buttons). Button[i].Top := A.Y  +  (i*20); 
        if i mod 2 <> 0 then A.Y := A.Y +10 ;  // bei jedem 2. mehr abstand lassen 
      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;

_________________
Bei e-mails an Privatadresse bitte "Delphi Forum" als BETREFF angeben!
Morduk666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 19.06.03 00:08 
hmmm. also irgendwie mit dem ereignis klapts ned so richtg bei mir bzw garned ;

hab das momentan so :
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 19.06.03 01:32 
oke hat sich erledigt zwecks ereignis ersma.