AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Formular auf Desktop zeichnen...
Thema durchsuchen
Ansicht
Themen-Optionen

Formular auf Desktop zeichnen...

Ein Thema von E307 · begonnen am 7. Feb 2007 · letzter Beitrag vom 25. Feb 2011
Antwort Antwort
Seite 1 von 3  1 23      
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#1

Formular auf Desktop zeichnen...

  Alt 7. Feb 2007, 16:12
Hallo! Dieses Thema wurde schon oft und viel in diversen Foren und auch hier behandelt, aber eine richtige Lösung für Delphi habe ich noch nicht gefunden.
Ich möchte mein Formular oder ein Bitmap auf den Desktop zeichnen und zwar hinter die Icons. Gibt es da eine gute Lösung? (Es darf auch was mit DirectX sein) Das sowas möglich ist beweist dieses C- Programm: http://www.angelcode.com/dev/overlay/ , sowie das DSPack, was sein Video auch auf den Desktop hinter die Icons zeichnen kann.
  Mit Zitat antworten Zitat
megaGOLDdeluxe

Registriert seit: 23. Sep 2004
7 Beiträge
 
#2

Re: Formular auf Desktop zeichnen...

  Alt 7. Feb 2007, 23:53
Reicht es nicht, wenn Du Dir das Handle des Desktops ermittelst, und dieses dann Deinem Form als Parent zuweist?

MfG
Pierre
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Formular auf Desktop zeichnen...

  Alt 7. Feb 2007, 23:59
Der Desktop ist ein Listview. Und "hinter den Icons" ist nur noch das Hintergrundbild. Entweder tauscht du das Hintergrundbild aus oder du zeichnest auf das Hintergrundbild und aktualisierst es. Ein Programmfenster wirst du nicht dahinterbekommen. Wäre genauso, als wenn du ein Fenster zwischen einer Schaltfläche und dessen Parentfenster bekommen wolltest.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Formular auf Desktop zeichnen...

  Alt 8. Feb 2007, 11:51
Wie ermittle ich das Handle des Hintergrunds, um irgendetwas darauf zu zeichnen?
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Formular auf Desktop zeichnen...

  Alt 8. Feb 2007, 12:29
bei dem link den du gepostet hast ist doch auch ein source dabei... vllt kannst du den ja nach delphi porten
Dominik
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Formular auf Desktop zeichnen...

  Alt 8. Feb 2007, 12:34
Hier ist noch ein Link dazu, oder kanntest du den schon? Desktop-Overlay mit DirectX
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Formular auf Desktop zeichnen...

  Alt 8. Feb 2007, 14:18
Ja, das kenne ich schon. Bei mir kommt die Meldung: "Creation of flippable overlay Surface failed", wenn ich das Objekt erstelle:
XD:=TDDOverlay.Create(1024,768,clBlack);
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Formular auf Desktop zeichnen...

  Alt 8. Feb 2007, 17:17
Wenn ich das Objekt so erstelle:
XD:=TDDOverlay.Create(1,1,clBlack); Kommt die Meldung: "Your hardware doesn't support the surface we're trying to create" oderso. Das kann aber eigentlich nicht sein. Meine Grafikkarte: NVIDIA GeForce 7600 GS
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Formular auf Desktop zeichnen...

  Alt 10. Feb 2007, 18:29
Delphi-Quellcode:
unit test;

interface

uses
  Windows, Classes, SysUtils, Messages, Graphics, Forms, Controls, ActiveX, DirectShow9,
  DirectDraw, DSUtil, ComCtrls, MMSystem, OverlayUnit, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    D3DWidth, D3DHeight: Integer;
    FOldColor, OverlayColor: COLORREF;
   // Löschen und Wiederherstellen der Desktopfarbe und des Hintergrundbildes
    procedure SetDesktopColor(clr:DWord);
    procedure RestoreDesktop;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  XD: TDDOverlay;

implementation

{$R *.dfm}
{$R vres.res}

// Diese beiden Proceduren sind nahezu 1zu1 aus dem Beispiel übersetzt
procedure TForm1.RestoreDesktop;
var
  colorID:Integer;
begin
   // Restore the original desktop wallpaper
   SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, NIL, 0);

   if FOldColor<>CLR_INVALID then begin
      colorID:=COLOR_BACKGROUND;
      SetSysColors(1,colorID,FOldColor);
  end;
end;

procedure TForm1.SetDesktopColor(clr:DWord);
var
  colorID:Integer;
  color:COLORREF;
begin
   // Remember current background color
  if FOldColor=CLR_INVALID then
    FOldColor:=GetSysColor(COLOR_BACKGROUND);

   // Set the desktop background color to the wanted one
  colorID:=COLOR_BACKGROUND;
  color:=clr;
  SetSysColors(1,colorID,color);

   // Remove the desktop wallpaper, without updating the registry
  SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(''), 0);
end;

procedure TForm1.FormCreate(Sender:TObject);
begin
  // Brauch mer nachher beim Timer (für dieses Beispiel)
  Randomize;

  D3DWidth:=640;
  D3DHeight:=480;

  FOldColor:=CLR_INVALID;

  // Die Overlayfarbe setzen
  OverlayColor:=RGB(8,0,16);

   // Set the desktop background to the color of the dest color key
   SetDesktopColor(OverlayColor);


  // Die TDDOverlay Klasse erstllen
   // Initialize the overlay surface
  try
    XD:=TDDOverlay.Create(D3DWidth,D3DHeight,OverlayColor);
  except
    Application.Terminate;
    Exit;
  end;

  // Stell beim Timer im ObjektInspektor am besten Enabled auf False
  Timer1.Enabled := True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Timer1.Enabled := False;

   // Restore the desktop background
    RestoreDesktop;

   // Remove the overlay
  FreeAndNIL(XD);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.Width := D3DWidth;
    Bitmap.Height := D3DHeight;

    // Da der Hintergrund des Bitmaps weiß ist...
    Bitmap.Canvas.Pen.Color := clBlack;

    Bitmap.Canvas.MoveTo(Random(D3DWidth), Random(D3DHeight));
    Bitmap.Canvas.LineTo(Random(D3DWidth), Random(D3DHeight));

    // Overlay aktualisieren
    XD.Update(Bitmap.Canvas.Handle);
  finally
    FreeAndNIL(Bitmap);
  end;
end;
Code:
Creation of flippable overlay surface failed
Code:
Failed to create overlay surface
Das ist der Code und die (leider) zugehörigen Fehlermeldungen. Hat jemand eine Idee woran das liegt? Ich habe die OverlayUnit schon tausendmal überprüft, aber absolut nichts gefunden!
  Mit Zitat antworten Zitat
E307

Registriert seit: 23. Feb 2006
134 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Formular auf Desktop zeichnen...

  Alt 17. Feb 2007, 10:00
*schieb* Weis keiner, wo der Fehler liegen könnte?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 +1. Es ist jetzt 17:09 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