Einzelnen Beitrag anzeigen

torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#23

Re: Suche Pfeile zur Visualisierung von Beziehungen

  Alt 18. Aug 2007, 12:04
Hello Again,

ich danke Euch beiden für Eure hilfreichen Tipps und den Hinweis darauf, dass ich meine Schwachstellen abdichten muss. Ich gelobe Besserung. => Binsoweit, dass der Pfeil fast richtig mitwandert...

Ich habe mich etwas mit dem Beispiel auseinandergesetzt, da ich finde, dass ich schon verstehen muss, was da passiert und sicher einiges davon gebrauchen kann, was drin geschrieben steht. Ich beziehe mich jetzt also auf das Beispiel mit den beiden Panels.

Dort gibt es die Routine FormPaint, wo bisher geschrieben stand, von wo nach wo der Pfeil gezeichnet werden soll. Ich habe versucht diese Routine zu verfeinern, bin aber nicht wirklich glücklich mit der Lösung, da ich, wie ich finde eigentlich einen Winkel um jeden Pin legen müsste. Wenn sich das andere Panel in einem der Winkel befindet, oder es tangiert, wäre klar, dass von wo nach wo der Pfeil gezeichnet werden muss.

Da mir dazu die Routine fehlt, habe ich es erstmal provisorisch so gelöst:

Delphi-Quellcode:
procedure TForm1.FormPaint (Sender: TObject);
var
  P1, P2 : TPoint;
begin
  inherited
  if Panel1.Top > Panel2.Top + Panel2.Height then P1 := PinPosition(Panel1,pinTop);
  if Panel1.Top < Panel2.Top + Panel2.Height then P1 := PinPosition(Panel1,pinBottom);
  if Panel1.Top = Panel2.Top then P1 := PinPosition(Panel1,pinRight);

  if Panel1.Left < Panel2.Left then P2 := PinPosition(Panel2,pinLeft);
  if Panel1.Left > Panel2.Left then P2 := PinPosition(Panel2,pinLeft);
  if Panel1.Left = Panel2.Left then
    if Panel1.Top < Panel2.Top then P2 := PinPosition(Panel2,pinTop);
    if Panel1.Top > Panel2.Top then P2 := PinPosition(Panel2,pinBottom);
   {und dann der rest vom Schützenfest}
end;
Der Code könnte Fehler beinhalten, da ich ihn mit der Hand abschreiben musste. Sitze hier an einem Rechner, wo ich nicht mal eben den Code vom Stick kopieren kann.

Problem oder Unsauberkeit des Codes ist, dass Pfeil nur dann Rechts oder Links angedockt wird, wenn die beiden Panels auf gleicher Höhe sind. Besser wäre aber, wenn in der Routine ein gewisser Bereich berücksichtigt werden würde.

Skizziert sieht das ganz einfach aus. man zeichne ein Panel in die Mitte und ziehe linien diagonal durch. Die dadurch enstehenden 4 Bereiche sind die Bereiche, die wichtig sind. Wie kann ich das nun ermitteln???
Danke
Tom
  Mit Zitat antworten Zitat