Einzelnen Beitrag anzeigen

pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#1

Problem Graphen erstellen unter delphi 7

  Alt 25. Apr 2006, 14:47
Ich möchte für ein Lernprogramm für den Dijkstra algorithmus den graphen dastellen und habe nun paar probleme
1. wie verhindere ich das der graph den ich durch canvas erstelle "gelöscht" werden, wenn man das
fenster verkleinert?
2. ich habe so weit, dass er zur laufzeit die "knoten zeichnet" und beschriftet nun hab ich beim
zeichnenen der "pfeile" das bei line to bzw von move to, dass die
linie im zentrum des knotens" startet bzw enden und es soll ja erst am rand der ellipsen
starten/enden. Mann muss so denke ich die "überschuessigen" pixel abziehen. Aber wie ambesten?
Nur diese implementierung sollte so sein, dass sie in jeder richtung funktioniert, da die knoten
ja "überall" auf der zeichenfläche eingetragen werden können, sprich die knoten werden vom
benutzer eingetragen.
3. wie kann man die "pfeile" mit bewertungen beschriften?

wundert euch nicht über den quellcode ohne dijkstra, wollte erstmal das ein graph erstellt werden kann unter berücksichtigung der fragen 1->3, da ich bisher nie graphen unter delphi zeichnen muste

vielen Dank für eure hile im vorraus :=)
der delphi code ausschnitt
Delphi-Quellcode:


procedure TForm1.eingabeClick(Sender: TObject);
var x1,y1, x2,y2 : integer;
begin
 anfknoten[j]:=strtoint(edit1.text); //einlesen des Anfangsknoten
 endknoten[j]:=strtoint(edit2.text); //einlesen des endknoten
 bewertung[j]:=strtoint(edit3.text); //einlesen des der bewertung
   with paintbox1.Canvas do
       begin
      x1 := x_ort[anfknoten[j]];
      y1 := y_ort[anfknoten[j]];
      x2 := x_ort[endknoten[j]];
      y2 := y_ort[endknoten[j]];
         canvas.moveto(x1,y1);
         canvas.LineTo(x2,y2);
       end;
     edit1.Clear; //nach eingabe editfelder leeren
     edit2.Clear; //
     edit3.Clear; //
     j:=j+1; // erhöhe j um beim nächsten betätigen in eine höhere benen des arrays zu kommen
end;

procedure TForm1.knotenerschaffen(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
Var nummer:string;
    wert:integer;
begin nummer:=inttostr(n);
  if n<=8 then
      begin
        with label1.Canvas do
         begin
           x_ort[n]:= x; // Speichern der X/Y koordinaten der (maximal) 8 knoten
           y_ort[n]:= y; //

           canvas.Ellipse(x-15,y-15,x+15,y+15);
           Canvas.Textout(x-3,y-6,nummer);
           n:=n+1;
        end;
      end;
end;
  Mit Zitat antworten Zitat