Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Strich in 2ten Formular (https://www.delphipraxis.net/33476-strich-2ten-formular.html)

svern 7. Nov 2004 21:28


Strich in 2ten Formular
 
Hey,

ich versuche gerade krampfhaft einen Strich in meinem 2ten Formular (erst später sichtbar) zu erzeugen.... natürlich klappt es nicht.

Habe in einer Prozedur diesen Quellcode:
Delphi-Quellcode:
 canvas.pen.color:=clred;
               LINKS:=(80+((Akt_KNOTEN -1)*96));   // Ausgangsknoten
               OBEN:=(Y_Werte[Akt_KNOTEN] + 8);    // Ausgangsknoten
               Form2.Canvas.Moveto(LINKS,OBEN);
               ZL:=(((KN_Zielknoten[Akt_KNOTEN]-1)*96)-6); // Zielknoten
               ZO:=(Y_Werte[KN_Zielknoten[Akt_KNOTEN]] +8);
               Form2.Canvas.Lineto(ZL,ZO);

Doch wenn ich dann nach ablauf der Prozedur diese Formular ansehen will (Form2.showmodal), dann ist der Strich nicht da...
weiß jemand warum nicht???
Wie bekomme ich meine Striche?

StefanDP 7. Nov 2004 21:33

Re: Strich in 2ten Formular
 
damit der strich IMMER sichtbar ist, musst du die prozedur in den OnPaint vom 2ten form schreiben!

ansonsten wird der strich gezeichnet, das fenster ist noch nicht sichtbar. wenn das 2te fenster dann sichtbar ist, wird es ja neugezeichnet und der strich ist weg!

/edit: oder ein tbitmap aufs 2te form knallen und auf dessen image.canvas zeichnen

Nicodius 7. Nov 2004 21:35

Re: Strich in 2ten Formular
 
Zitat:

erst später sichtbar

daran scheiterts .. du musst das ganze zuerst in ein bitmap speicehrn



würde ca so aussehen

Delphi-Quellcode:
 
var bit : TBitmap;
begin
  Bit := TBitmap.Create();
  Bit.Width := Form2.Width;
  Bit.height := Form2.Height;
  Bit.canvas.pen.color:=clred;
               LINKS:=(80+((Akt_KNOTEN -1)*96));   // Ausgangsknoten
               OBEN:=(Y_Werte[Akt_KNOTEN] + 8);    // Ausgangsknoten
               Bit.Canvas.Moveto(LINKS,OBEN);
               ZL:=(((KN_Zielknoten[Akt_KNOTEN]-1)*96)-6); // Zielknoten
               ZO:=(Y_Werte[KN_Zielknoten[Akt_KNOTEN]] +8);
               Bit.Canvas.Lineto(ZL,ZO);
  Form2.Canvas.Draw(0,0,Bit);
end;

wenn was nicht stimmt .. hab das ganze in 1 minute geschrieben :stupid:

StefanDP 7. Nov 2004 21:37

Re: Strich in 2ten Formular
 
@nicodius: der strich deiner lösung ist aber auch nur solange sichtaber, wie die form nicht neugezeichnet wird!?

Nicodius 7. Nov 2004 21:40

Re: Strich in 2ten Formular
 
jo aber da musst nur hier suchen .... per ApplicationEvents(in der komponenten liste bei "zusätzliches(weiß nicht ab welcher delphi version )) auf das deactivate, minimize etc agieren

im deactivate

Delphi-Quellcode:
begin
  BitBlt(Bit.canvas.handle, 0, 0, Form2.width, Form2.height, Form2.canvas.handle, 0, 0, srccopy);
end;
im activate

Delphi-Quellcode:
begin
  PaintBox1.Canvas.Draw(0, 0, Bit);
end;

und das halt bei minimaize auch noch einführen
Delphi-Quellcode:
begin
  BitBlt(Bit.canvas.handle, 0, 0, Form2.width, Form2.height, Form2.canvas.handle, 0, 0, srccopy);
end;


so leicht geht das :zwinker:

svern 7. Nov 2004 21:57

Re: Strich in 2ten Formular
 
Hab jetzt in Unit1:

Delphi-Quellcode:
    bit := TBitmap.Create;
               bit.Canvas.pen.Color := clRed;
               bit.Width := Form2.Width;
               bit.Height := Form2.Height;
               bit.Canvas.Moveto(Links,Oben);
               bit.Canvas.LineTo(ZL,ZO);
               Form2.Canvas.Draw(0,0,bit);

und in Unit2:
Delphi-Quellcode:
procedure TForm2.FormActivate(Sender: TObject);
begin
PaintBox1.Canvas.Draw(0, 0, bit);
end;

procedure TForm2.FormDeactivate(Sender: TObject);
begin
BitBlt(bit.canvas.handle, 0, 0, Form2.width, Form2.height, Form2.canvas.handle, 0, 0, srccopy);
end;
Naja, kein Strich da...

Habe noch zusätzlich eine Paintbox in Formular 2 gemacht, aber auch das brachte nichts.
Habt ihr noch nen Tipp?

svern 7. Nov 2004 22:10

Re: Strich in 2ten Formular
 
Habs hinbekommen, thx nochmal

alcaeus 7. Nov 2004 22:22

Re: Strich in 2ten Formular
 
Hi Nico,

Zitat:

Zitat von Nicodius
jo aber da musst nur hier suchen .... per ApplicationEvents(in der komponenten liste bei "zusätzliches(weiß nicht ab welcher delphi version )) auf das deactivate, minimize etc agieren

Wie sagt man doch so schön? Schmarrn!
@svern: du speicherst am Besten mit einer Boolean-Variable ob der Strich da sein soll oder nicht. Die PaintBox kennt ein Ereignis namens Delphi-Referenz durchsuchenOnPaint, welches ausgelöst wird, wenn die PaintBox neu gezeichnet wird. Darin einfach abfragen, ob der Strich da sein darf, und wenn ja, dann wird er gezeichnet.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz