Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   auf dem Desktop zeichnen (https://www.delphipraxis.net/132062-auf-dem-desktop-zeichnen.html)

Teekeks 5. Apr 2009 14:29


auf dem Desktop zeichnen
 
Hi!
Ich möchte auf einen Buttonklick auf den Desktop etwas malen.
Das hier hab ich:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var btm1:TImage;
    x,y:integer;
begin
  btm1:=TImage.Create(Form1);
  btm1.Picture.LoadFromFile('/home/peter/Decbild/ursprung.bmp');
  btm1.Canvas.Color:=clgreen;
  btm1.Canvas.Rectangle(200,200,300,300);
  btm1.Picture.SaveToFile('/home/peter/Decbild/dect.bmp');
  btm1.Free;
  screen.Updatescreen;
end;
Das dect.bmp ist das Bild was der Desktop ist. Mein Problem ist das ich zwar das bild ändere aber nicht den Desktop. Wie mach ich das?

gruß Teekeks
ps: ich arbeite mit Linux

mr_emre_d 5. Apr 2009 15:21

Re: auf dem Desktop zeichnen
 
Gibt es die Funktionen GetDesktopWindow, GetDC / GetWindowDC und BitBlt in Lazarus ?

PS:
Zitat:

Zitat von Teekeks
Delphi-Quellcode:
..LoadFromFile('/home/peter/Decbild/ursprung.bmp');
ps: ich arbeite mit Linux

Also auf das wäre ich nieee gekommen ;)

MfG :roll:

_frank_ 5. Apr 2009 15:40

Re: auf dem Desktop zeichnen
 
Zitat:

Zitat von mr_emre_d
Gibt es die Funktionen GetWindowDesktop, GetDC / GetWindowDC und BitBlt in Lazarus ?

in Lazaru schon, aber die Frage ist, obs die Funktionen unter Linux gibt, bzw. wie deren Pendants sind.

Gruß Frank

BullsEye 5. Apr 2009 15:55

Re: auf dem Desktop zeichnen
 
Mit folgendem Code kannst du was auf dem Desktop schreiben. Vllt kannste den Code anpassen


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 DCanvas: TCanvas;
 DHandle: HWND;
begin
 DHandle:=GetDC(0);
 if DHandle<>0 then
 begin
   try
     DCanvas:=TCanvas.Create;
     try
       DCanvas.Handle:=DHandle;
       DCanvas.Font.Color:=clRed;
       DCanvas.Font.Size:=24;
       DCanvas.Brush.Style:=bsClear;
       DCanvas.TextOut(100, 100, 'Ich will ein Spiel spielen!!!');
     finally
       DCanvas.Free;
     end;
    finally
      if ReleaseDc(0, DHandle)<>1 then
    end;
 end;
end;

mr_emre_d 5. Apr 2009 16:15

Re: auf dem Desktop zeichnen
 
Zitat:

Zitat von _frank_
Zitat:

Zitat von mr_emre_d
Gibt es die Funktionen GetDesktopWindow, GetDC / GetWindowDC und BitBlt in Lazarus ?

in Lazaru schon, aber die Frage ist, obs die Funktionen unter Linux gibt, bzw. wie deren Pendants sind.

Gruß Frank

Ja, ich hätte die Frage genauer formulieren sollen. Thx

Zitat:

Zitat von BullsEye
Delphi-Quellcode:
DHandle:=GetDC(0);

DesktopDC muss nicht zwingend = 0 sein. Besser wäre es da GetDesktopWindow zu benützen.

MfG

Luckie 5. Apr 2009 17:43

Re: auf dem Desktop zeichnen
 
MSDN-Library durchsuchenGetDesktopWindow ist eine Windows API-Funktion, ob es diese auch unter Linux gibt wage ich zu bezweifeln.

_frank_ 5. Apr 2009 17:48

Re: auf dem Desktop zeichnen
 
eine möglichkeit wäre evtl. das bild zu ändern und "xsetroot -bitmap <bilddatei>" aufzurufen. das wäre eine möglichkeit das hintergrundbild unabhängig vom Displayanager zu setzen.

HTH Frank

Teekeks 6. Apr 2009 07:32

Re: auf dem Desktop zeichnen
 
Hallo alle zusammen.
Ich bedanke mich schonmal für alle Kommentare. Ich werde auch mal alles ausprobieren...
GetDesktopWindow hatte ich bereits probiert, geht aber nicht (ist ja auch WindowsAPI :D )

gruß Teekeks

jaenicke 6. Apr 2009 08:02

Re: auf dem Desktop zeichnen
 
Zitat:

Zitat von mr_emre_d
Zitat:

Zitat von BullsEye
Delphi-Quellcode:
DHandle:=GetDC(0);

DesktopDC muss nicht zwingend = 0 sein. Besser wäre es da GetDesktopWindow zu benützen.

Der Unterschied ist nur, dass GetDC(0) auch unter Linux funktioniert, GetDesktopWindow aber wohl nicht (ausprobiert habe ich das aber jetzt nicht). ;-)

// EDIT:
Hier ein Beispiel:
http://wiki.lazarus.freepascal.org/D..._of_the_screen

Teekeks 6. Apr 2009 08:14

Re: auf dem Desktop zeichnen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
DCanvas: TCanvas;
DHandle: HWND;
begin
DHandle:=GetDC(0);
if DHandle<>0 then
begin
   try
     DCanvas:=TCanvas.Create;
     try
       DCanvas.Handle:=DHandle;
       DCanvas.Font.Color:=clRed;
       DCanvas.Font.Size:=24;
       DCanvas.Brush.Style:=bsClear;
       DCanvas.TextOut(100, 100, 'Ich will ein Spiel spielen!!!');
     finally
       DCanvas.Free;
     end;
    finally
      if ReleaseDc(0, DHandle)<>1 then
    end;
end;
end;
So. Das geht zwar (nach ewiger unit-suche) aber es passiert nichts.
Ich kriege keine Fehlermeldung, nichts, er tut einfach nichts nachdem ich auf den Button geklickt habe :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.
Seite 1 von 2  1 2      

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