Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Line über Controls zeichnen (https://www.delphipraxis.net/77190-line-ueber-controls-zeichnen.html)

ralfi002 15. Sep 2006 21:15


Line über Controls zeichnen
 
Tag alle zusammen,

kann mir vielleicht jemand sagen wie man eine Linie über einem Control zeichnen kann?

Wenn ich die Canvas funktion meiner Form verwende ist die Linie immer unter den controls.

Ich habe auch bemerkt das TGraphicControl Klassen auch immer unterhalb von TWinControls Klassen sind.

Mein Ziel ist es: wenn ich ein objekt auf meiner Form bewege (wo standard controls platziert sind), soll der Ursprungspunkt und die aktuelle mouse-Position mit einer linie verbunden werden. Diese Linie soll dann natürlich an oberster Ebene sein.

Thx,
Ralfi

mkinzler 15. Sep 2006 21:17

Re: Line über Controls zeichnen
 
Erzeuge eine Image mit transparenten Hintergrund welches du ganz nach oben bringst.

Christian Seehase 15. Sep 2006 21:21

Re: Line über Controls zeichnen
 
Moin Ralfi,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Nicht, dass Du Dich wunderst:
Ich habe Deinen Doppelpost mal entfernt ;-)

ralfi002 16. Sep 2006 10:26

Re: Line über Controls zeichnen
 
Danke erstaml für deine rasche Antwort (mkinzler),

aber leider funktioniert es nicht.

Das TImage control bleibt auch weiterhin unterhalb z.b. eines Buttons.

Auch wenn ich die Sichtbarkeitsreihenfolge zur Laufzeit ändere habe ich nicht den gewünschten Erflog.
Hier mein Code:
Delphi-Quellcode:
...
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i := 0 to self.ControlCount-1 do
  begin
    if self.Controls[i].Name = Image1.Name then
      self.Controls[i].BringToFront;

  end;
  Image1.Canvas.LineTo(Image1.Width, Image1.Height);
end;
...
Hast vielleicht noch eine andere Idee?

Thx,
ralfi

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

mkinzler 16. Sep 2006 11:23

Re: Line über Controls zeichnen
 
Versuchs mal statt des Images mit ner PaintBox.

ralfi002 16. Sep 2006 11:33

Re: Line über Controls zeichnen
 
Ne funktioniert auch nicht.

Ich versuchs mal mit einer von TComponent abgeleiteten Klasse. Weis jemand vielleicht welche methode ich überschreiben muss um das contol selbst zu zeichnen?

thx,
ralfi

mkinzler 16. Sep 2006 11:37

Re: Line über Controls zeichnen
 
Nimm TGraphicControl als Basisklasse, diese enthält einen Canvas.

ralfi002 17. Sep 2006 09:08

Re: Line über Controls zeichnen
 
Habe gelesen das TWinControl Objekte immer über TGraphicControl Objekten gezeichnet werden.
(Das ist echt blöd :cry: )

Gibt es vielleicht einen Trick, ein TGraphicsControl Objekt doch über ein TWinControl Objekt zu zeichnen?

thx,
ralfi

Lannes 17. Sep 2006 10:38

Re: Line über Controls zeichnen
 
Hallo,

eventuell hilft Dir das weiter, der Code zeichnet ein rotes Kreutz über eine RadioGroup:
Delphi-Quellcode:
//...
  private
    FCanvas: TControlCanvas;
//...
procedure TForm1.FormCreate(Sender: TObject);
begin
  FCanvas:=TControlCanvas.Create;
  FCanvas.Control := RadioGroup1;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  FCanvas.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  FCanvas.Pen.Color := clRed;
  FCanvas.MoveTo(0,0);
  FCanvas.LineTo(RadioGroup1.Width,RadioGroup1.Height);
  FCanvas.MoveTo(RadioGroup1.Width,0);
  FCanvas.LineTo(0,RadioGroup1.Height);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  //Kreutz entfernen
  RadioGroup1.Repaint;
end;

mimi 17. Sep 2006 14:28

Re: Line über Controls zeichnen
 
mit der winAPI funktion in den HADNLE des formulas müste es doch auch gehen oder ?

ralfi002 17. Sep 2006 18:15

Re: Line über Controls zeichnen
 
Danke Lannes für den guten Tipp,

leider ist mein Problem aber noch immer nicht gelöst, denn ich will eigentlich eine Linie über mehrere Controls zeichnen. Die TControlCanvas Klasse kann aber leider nur einem Control zugeordnet werden :cry: . Ich habe auch versucht die Form dem TControlCanvas objekt zuzuordnen, leider auch ohne Erfolg.

Sonst noch welche Tipps auf lager?

thx,
ralfi

SirThornberry 17. Sep 2006 18:31

Re: Line über Controls zeichnen
 
das TGraphicControls kein eigenes Handle haben und sich nur auf die Canvas ihres Parents zeischnen kann ein GraphicControl (zum Beispiel TImage) niemals über einem Control mit Handle liegen. Und ein WinControl (Fenster im Sinne von Windows) kann nie wirklich transparent sein. Daher ist die einfachste Lösung einen Screenshot vom Formular zu machen, diesen auf einem Panel zu zeischnen (zum Beispile ein Timage auf das Panel legen) und das Panel über alles andere legen

Lannes 17. Sep 2006 22:38

Re: Line über Controls zeichnen
 
Hallo,
Zitat:

Zitat von ralfi002
Danke Lannes für den guten Tipp,

leider ist mein Problem aber noch immer nicht gelöst, denn ich will eigentlich eine Linie über mehrere Controls zeichnen. Die TControlCanvas Klasse kann aber leider nur einem Control zugeordnet werden...

Du könntest es einem transparenten Panel, das über allen Controls liegt zuordnen.

hab mal den Tipp "unsichtbare Panel erstellen" von http://www.dbr-software.de/delphi/ mit meinem Code kombiniert, es funktioniert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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