Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 18:20

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Jan 22, 2009 19:46 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

wie das Thema schon sagt such ich ne Möglichkeit direkt auf den DesktopHintergrund zu rendern. Geht sowas? Ich will praktisch sowas wie ein bewegtes Hintergrundbild haben.

MfG & Thx Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 22, 2009 21:10 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2068
Programmiersprache: C++
Ja, das geht.
Nur mit DirectX über ActiveX.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 22, 2009 21:44 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Nah, no need for directx.

Try this:

Code:
  1.   Canv := TCanvas.Create;
  2.   Canv.Handle := GetWindowDC(0);
  3.  
  4.   Canv.pen.Color := clred;
  5.   Canv.pen.Width := 20;
  6.   Canv.moveto(Screen.Width, 2);
  7.   Canv.lineto(2, 2);
  8.   Canv.lineto(2, Screen.Height);
  9.   Canv.lineto(Screen.Width, Screen.Height);
  10.   Canv.lineto(Screen.Width, 2);
  11.  
  12.   Canv.Font.Name   := 'Arial';
  13.   Canv.Font.Size   := 55;
  14.   Canv.Font.Color  := clgreen;
  15.   Canv.Brush.Style := bsclear;
  16.   Canv.textout(240, Screen.Height div 2 - 30, 'Hello to Screen !');
  17.  
  18.   Canv.Free;

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 22, 2009 21:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Ich glaube nicht, dass er per Canvas auf den Desktop zeichnen möchte :D

Ich hab eben versucht einen Rendering Context mit dem Desktop als Handle zu erstellen, geht aber nicht (OSError).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 22, 2009 22:49 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jul 01, 2003 18:59
Beiträge: 887
Wohnort: (The Netherlands)
Programmiersprache: fpc/delphi/java/c#
Works on my pc: windows xp sp3.

_________________
http://3das.noeska.com - create adventure games without programming


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jan 22, 2009 23:45 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

@noeska: funktioniert bei mir auch, aber ich will ja auf den Desktop render und nich drauf malen...

Gibts nich noch irgend einen Trick, wie man das machen kann? Bei Videos kann man doch auch #100010 als Farbe nehmen und sieht dann das Video auf dem Hintegrund?!

Oder ist es seher schwer sich in DirectX rein zu fitzen? Vlt. versuch ich das ma....

€: hab grad raus gefunden, das man damit hinter offene Fenster malenkann, aber ich komm nich hinter die Icons!?
Code:
  1.   wnd:=GetDesktopWindow;
  2.   wnd:=FindWindowEx(wnd, 0, 'Progman', nil);
  3.   wnd:=FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
  4.   wnd:=FindWindowEx(wnd, 0, 'SysListView32', nil);


MfG Bergmann.


Zuletzt geändert von Bergmann89 am Fr Jan 23, 2009 15:25, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 11:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Ich weiss ja nicht, was genau du damit machen willst, aber vllt reicht es ja schon nen Screenshot des Desktops zu machen und dann dieses Bild zu benutzen, um so das "Auf den Desktop rendern" vorzutäuschen.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 11:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wenn du nen Canvas auf den Desktop bekommst, kannst du vielleicht in irgendeinem Fenster (Stichwort Offscreen rendering) nen Renderkontext bekommen, Zeichnen und dann das Bild auf den Desktop kopieren.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 11:52 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

es gibt schon einen älteren Thread zu genau dem Thema. Vll hilft dir der ja weiter:
viewtopic.php?t=5241&highlight=desktop+rendern

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 23, 2009 14:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

also ich hab mich diese Nacht nochma damit beschäftigt und das is bis jetzt das ergebniss:

Damit komm ich an das DesktopHandle (is aber immer noch nich HINTER den Icons?!).
Und erzeug eine Canvas auf der ich zeichnen kann:
Code:
  1.   var wnd: HWND;
  2.   wnd:=GetDesktopWindow;
  3.   wnd:=FindWindowEx(wnd, 0, 'Progman', nil);
  4.   wnd:=FindWindowEx(wnd, 0, 'SHELLDLL_DefView', nil);
  5.   wnd:=FindWindowEx(wnd, 0, 'SysListView32', nil);
  6.  
  7.   Canv := TCanvas.Create;
  8.   Canv.Handle := GetWindowDC(wnd);


Und damit kopier ich den Inhalt der Form1Canvas auf die DesktopCanvas:
Code:
  1. Canv.CopyRect(Rect, Form1.Canvas, Rect);


Jetzt hab ich noch 2 Probleme:
1.: Ich muss noch hinter die Icons kommen
2.: Wenn das Form1-Fenster nich sichtbar is gibts auch kein bild, also muss ich den Inhalt des FrameBuffers möglichst schnell auf die Canvas bekommen. Ichhabs schon so versucht, aber das funzt net wirklich:
Code:
  1. var RenderTex: TglBitmap2D;
  2. var Stream: TMemoryStream;
  3. var BMP: TBitmap;
  4.  
  5. procedure InitOpenGL;
  6. begin
  7. [...]
  8.   BMP := TBitmap.Create;
  9.  
  10.   Stream := TMemoryStream.Create;
  11.  
  12.   RenderTex := TglBitmap2D.Create;  
  13.   RenderTex.GenTexture(false);
  14. [...]
  15. end;
  16.  
  17. procedure Render;
  18. begin
  19. [...]
  20.   RenderTex.Bind();
  21.   RenderTex.GrabScreen(0,0,Form1.Width,Form1.Height,ifRGB8);
  22. [...]
  23. end;
  24.  
  25. procedure IdleHandler(Sender: TObject; var Done: Boolean);
  26. begin
  27. [...]
  28.   RenderTex.SaveToStream(Stream,ftBMP);
  29.   Stream.Position := 0;
  30.   BMP.LoadFromStream(Stream);
  31.   Canv.CopyRect(Rect, BMP.Canvas, Rect);  
  32. [...]
  33. end;
Und irgendwie kommt mir die Methode nich so ganz gut vor....

@Shaijan: Der Treath klingt vielversprechend, aber wenn dann die ganzen DesktopFunktionen nich mehr gehen is irgendwie Mist...

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Okt 02, 2009 19:10 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,
hab noch ne andere Idee dazu: ich mach mir n bild als hintergrund was ne einheitliche farbe hat. und die Zeile, die dann nicht meine Farbe haben überzeichne ich einfach nich. das mach ich ganz einfach indem ich TranspartentColor der Form auf true setzte und dann sowas wie ne Maske für die Form erzeuge. Dazu brauch ich aber in jedem Renderdurchgang das Bild des Desktops, un da weiß ich net wie ich da rann komm. Hat da einer von euch ne Idee? Wichtig is, das es nur der Desktop is, ohne Fenster die evtl offen sind...

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Jan 18, 2010 16:26 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
Hey,

ich hab vor kurzem, DAS im Netz gefunden. Damit kann man bei Win7 Videos als Hintergrund benutzen. Und da dachte ich mir, das es ja evtl jetz unter Win7 ne Möglichkeit gibt sich nen RenderContext auf dem Desktop aufzubauen. Hat da schonma jmd erfahrungen mit gemacht?

MfG Bergmann

_________________
Aktuelle Projekte: BumpMapGenerator, Massive Universe Online
Auf meiner Homepage gibt auch noch paar Projekte und Infos von mir.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 22, 2010 11:36 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 06, 2005 18:34
Beiträge: 362
Wohnort: Hamburg
Hi ...

ich hab mir die Seite nicht genau angeschaut, aber ich befürchte die Tools arbeiten mit DirectX/DirectDraw oder sowas.
Du kannst sonst mal den Source Code von VLC durchwühlen. Der hatte jedenfalls unter XP (mit Win7 noch nicht getestet) eine Funktion, die ein Video als Desktophintergrund auch hinter den Icons dargestellt hat, allerdings auch nur wenn man als Output DirectX gewählt hat glaub ich. Aber vll kann dir da jemand helfen.

Gruß
Shai

_________________
Der Mensch hat neben dem Trieb der Fortpflanzung und dem zu essen und zu trinken zwei Leidenschaften: Krach zu machen und nicht zuzuhören. (Kurt Tucholsky)
Schwabbeldiwapp, hier kommt die Grütze. (Der Quästor)


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Jan 22, 2010 17:51 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das müsste per Overlay gearbeitet haben. Das bedeutet, er setzt den Hintergrund auf eine Farbe und sagt DX dann, dass es diese Farbe mit dem gerenderten Bild ersetzen soll. Sowas macht auch Winamp, wenn man die Visualisierungen aufm Desktop anzeigen lässt.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 14 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 15 Queries | GZIP : On ]