AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Auf Canvas von anderen Programmen zeichnen.

Auf Canvas von anderen Programmen zeichnen.

Ein Thema von stiftII · begonnen am 1. Okt 2009 · letzter Beitrag vom 1. Okt 2009
Antwort Antwort
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#1

Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 16:10
Hallo .

Ich versuche vergebens mit Delphi auf dem Canvas von mspaint zu zeichnen.
Ich versuche momentan folgendermaßen ein Rechteck zu zeichnen:

Delphi-Quellcode:
var
  test : TBitmap;
  paint : hwnd;
begin
  paint := FindWindow(NIL,'untitled - Paint');
  CloseWindow(paint);
  test := TBitmap.Create;
  test.Canvas.Handle := paint;
  test.canvas.Brush.Color := CLBLACK;
  test.Canvas.Rectangle(10,10,100,100);
end;
Zuerst suche ich mit FindWindow das Window Handle von mspaint, das funktioniert auch.
Dann weise ich dem canvas meiner bitmap das handle von mspaint zu.

Allerdings wird nichts gezeichnet, gibt auch keine Fehlermeldung oder dergleichen.

Habt ihr ne Idee woran das liegen könnte ?

~stift
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.578 Beiträge
 
#2

Re: Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 16:21
Erstmal: Falls das nicht nur aus Spaß an der Fred' ist: Vergiss es. Mir fällt nämlich absolut kein Sinn dafür ein.

Zum Thema: Du hast ein Window-Handle und brauchst aber ein Handel von einem DC. Das bekomst du mit GetDC()
  Mit Zitat antworten Zitat
stho

Registriert seit: 16. Sep 2009
Ort: 127.0.0.1
288 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 16:23
Geht das überhaupt?!

Also ich sage mal das ich keine Ahnung habe...

aber ich vermute das es nicht geht. Du weißt doch gar net ob mspaint nen canvas hat! Canvas ist doch eine unterklasse der anderen klassen... das ist somit delphi-intern.
oder irre ich mich da?
du könntest ihm parameter übergeben mit welcher farbe er welches pixel bemalen soll aber ich stell wir das SEHR umständlich vor (und weiß auch selber net ob und wie das klappen soll)


EDIT:
Zja, ich war wohl net schnell genug ^^
  Mit Zitat antworten Zitat
Benutzerbild von Fussball-Robby
Fussball-Robby

Registriert seit: 22. Okt 2007
Ort: Nähe Köln
1.063 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 16:28
Kleiner Tipp: Das Programm WinSpy, hier aus dem Forum. Einfach mal danach suchen (vom toms). Das Gibt der dir den Code aus, mit dem du das Handle von der Zeichenfläche von Paint bekommst (du holst dir nämlich das vom paint Fenster, und nicht von er weißen Zeichenfläche!). Mittels GetDC() bekommst du dann ein Handle des DCs (alle WinForms habe ein Canvas, lediglich grafische Anwendung, die OpenGL o.ä. nutzen, i.d.R. nicht). Dann erstellst du dir ein TCanvas per Variable und weist das DC dem Handle des TCanvas zu (nicht TBitmap erstellen). Auf dein TCanvas kannst du dann zeichnen.
Aber ich sage schonmal: Habe das gerade mal ausprobiert. Zeichnen kannst du dann auf Paint wunderbar, aber sobald das Paint-Fenster in irgendeiner Weise aktualisiert wird(verschoben, anderes Fenster drüber o.ä.) ist deine Zeichnung wieder weg.

Viele Grüße
Robert L.
Der folgende Satz ist richtig!
Der vorherige Satz ist falsch!

Paradox
  Mit Zitat antworten Zitat
NickelM

Registriert seit: 22. Jul 2007
Ort: Carlsberg
445 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 16:40
Es geht. Ich konnte sogar auf dem Fenster eines Spieles zeichenen.
Du musst erstmal wissen wie Paint aufgebaut ist. Welche Klasse die Zeichenfläche ist. Such mal im Forum hier nach WinSpy. Damit kannst du die Fensterhandles rauslesen.
Und wiest welches Handle du brauchst.
Wichtig ist wie auch schon gesagt wurde:

- FindWindow zum Handle finden
- Danach eine TCanvas Klasse createn
- Danach Canvas.hdc zuweisen mit GetDC(FindWindowHandle) also dem Handle den du durch FindWindow hast
- Nach dem kannst du mit der Canvas klasse alles machen.

TCanvas ruft alle API-Funktionen zum zeichen auf. Mit dem Handle, der im in hdc zugewiesen wurde.
Also funkt es durchaus.

Ich hoffe ich konnte dir ein wenig helfen, damit du verstehst wie es geht. Du musst aber nicht unbedingt WinSpy holen. Du kannst auch einfach auf dem Fenster von Paint mit dem FindWindow Aufruf den du gemacht hast zeichnen. Geht auch

EDIT: War jemand schneller LOL
Nickel
"Lebe und denke nicht an morgen"
Zitat aus dem gleichnamigen Bollywoodfilm.
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#6

Re: Auf Canvas von anderen Programmen zeichnen.

  Alt 1. Okt 2009, 18:23
Klappt super. Vielen Dank!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 02:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf