Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Canvas im Vordergrund (https://www.delphipraxis.net/120181-canvas-im-vordergrund.html)

n1ghtSurfer 6. Sep 2008 21:41


Canvas im Vordergrund
 
Hey hab wida ne seltsame Frage ^^ ich würde gerne mein Programm minimieren ein anderes starten und mit Canvas die ganze zeit was auf das 2. Programm schreiben, es soll auch da bleiben und nicht weg gehen wenn man drüber geht bzw. ne Schleife die es einfach immer wieder neu zeichnet
ich hoffe man kann mich verstehen und jmd. kann mir helfen
Thx im Vorraus
MfG
N1GhtSurfer

calculon 7. Sep 2008 00:26

Re: Canvas im Vordergrund
 
Zitat:

Zitat von n1ghtSurfer
[..] es soll auch da bleiben und nicht weg gehen wenn man drüber geht bzw. ne Schleife die es einfach immer wieder neu zeichnet [..]

Also wenn ich über eine Form gehe, dann geht die nicht weg. Probier mal im Objektinspektor deines zweiten Programms FormStyle auf fsStayOnTop zu setzen; u.U. ist das schon was du suchst. Genau hab' ich's aber nicht verstanden...

Gruß
--

Cyf 7. Sep 2008 01:09

Re: Canvas im Vordergrund
 
Zitat:

Zitat von n1ghtSurfer
Hey hab wida ne seltsame Frage ^^ ich würde gerne mein Programm minimieren ein anderes starten und mit Canvas die ganze zeit was auf das 2. Programm schreiben, es soll auch da bleiben und nicht weg gehen wenn man drüber geht bzw. ne Schleife die es einfach immer wieder neu zeichnet
ich hoffe man kann mich verstehen und jmd. kann mir helfen
Thx im Vorraus
MfG
N1GhtSurfer

Besorg dir das Handle, des Fensters auf das du zeichnen willst, hol dir den device context mittels
Delphi-Quellcode:
HDC GetDC(
  HWND hWnd  // handle to window
);
oder der Variante mit Ex dahinter und benutz dann die üblichen Zeichenmethoden.
Wenn das andere Fenster noch minimiert wird oder sich die Größe verändert, musst du dir eventuell was ausdenken, das zu überprüfen und neu zu zeichen (irgend ein Message-Hook?).

Luckie 7. Sep 2008 01:42

Re: Canvas im Vordergrund
 
Zitat:

Zitat von Cyf
);[/delphi] oder der Variante mit Ex dahinter und benutz dann die üblichen Zeichenmethoden.
Wenn das andere Fenster noch minimiert wird oder sich die Größe verändert, musst du dir eventuell was ausdenken, das zu überprüfen und neu zu zeichen (irgend ein Message-Hook?).

Nicht nur dann. Jedes mal wenn sich das andere fenster zeichnet, also eine W_PAINT Nachricht bekommt, muss er neu zeichnen. Er muss also die WM_PAINT Nachricht, die an das fremde Fenster geht abfangen. Dazu würde ich eine DLL in den fremden Prozess injizieren und die Fensterprozedur des fremden Fensters umbiegen und dort dann auf die Zeichennachrichten entsprechend reagieren. Ist allerdings nicht ganz trivial und erfordert ein entsprechendes Wissen und Können.

melodie 7. Sep 2008 11:01

Re: Canvas im Vordergrund
 
Wie wäre es wenn man ein Form nimmt, FormStyle = fsStayOnTop, den Hintergrund weiß macht, TransparentColor = True, TransparentColorValue = White.
Dann kann man mit Canvas auf die Form zeichnen.

n1ghtSurfer 7. Sep 2008 14:24

Re: Canvas im Vordergrund
 
Ne geht leider nit weil ich ja das programm dahinterg steuern muss ;P

Cyf 7. Sep 2008 17:32

Re: Canvas im Vordergrund
 
Zitat:

Zitat von Luckie
Dazu würde ich eine DLL in den fremden Prozess injizieren und die Fensterprozedur des fremden Fensters umbiegen und dort dann auf die Zeichennachrichten entsprechend reagieren. Ist allerdings nicht ganz trivial und erfordert ein entsprechendes Wissen und Können.

Tuts nicht auch ein globaler Hook mit entsprechender Beschränkung nur bei dem einem Fenster zu reagieren?

melodie 7. Sep 2008 18:27

Re: Canvas im Vordergrund
 
Zitat:

Zitat von n1ghtSurfer
Ne geht leider nit weil ich ja das programm dahinterg steuern muss ;P

Kann man nicht bei transparenten Forms da durch klicken?

n1ghtSurfer 7. Sep 2008 19:23

Re: Canvas im Vordergrund
 
Habs grade ausprobiert ja man kann durchklicken prob. is das wenn die Form Transparent ist ist auch Canvas Transparent
=( muss ich wohl doch mal eine der Komplizierteren Methoden versuchen

EDIT//
Ups ich war wohl nur zu dumm ausserhalb der Form zuzeichnen also habs jetzt so gemacht das ich ein Timer Eingebaut habe ihn auf 1ms gestellt habe die Form Transparent gemacht habe und diesen Code hier in abgeänderter Form verwendet habe =)
http://www.delphipraxis.net/internal...hlight=desktop


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:32 Uhr.

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