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

Aktuelle Zeit: Fr Jul 11, 2025 03:04

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Zeichnen auf dem Desktop
BeitragVerfasst: Fr Jul 28, 2006 18:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Hallöle, ich bins mal wieder.

Ich weiß, das ist ein altes Thema, und ich hab schon ein paar Sachen versucht. Es gibt aber anscheinend keine Möglichkeit, *hinter* die Symbole zu kommen.
Auch Fenster da hin zu bekommen, geht anscheinend nicht immer. Selbst mit ActiveDestop angeschaltet gibt es Probleme.
Dann geht es nur wenn ich das Fenster anzeige und ActiveDesktop danach anschalte. Wenn es vorher an war, muss es erst ausgeschaltet werden, aber das immer zu machen ist nicht schön. Obwohl ich gerade was dazu gefunden hab: TconDesktop

Hat schonmal jemand sowas gemacht oder sonstwie Erfahrungen?

Gruß,
Martok


PS: ich möchte damit Systeminformationen auf den Desktop "projizieren", falls es noch andere Lösungen gibt, wäre ich natürlich auch dankbar.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 28, 2006 20:08 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Eine primitive Lösung: (Aktive-Desktop aus, einfacher Bildhintergrund)
1. Pfad zum Bild aus der Registry auslesen
2. Bitmap in Desktopgröße erzeugen und in Desktop-Hintergrundfarbe anmalen
3. Bild entprechend dem Angaben in der Registry auf das Bitmap zeichnen
4. Deine Infos auf das Bitmap schreiben
5. Das Bitmap speichern als Hintergrund setzen
6. Desktop-Refresh auslösen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 28, 2006 23:53 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Naja, das geht zwar, aber so toll find ichs nicht. Weiß jemand, wie die Versionsnummern in die Windows-Betas kommen?

Wie auch immer, ich hab jetzt ein Fenster mit diesem Code auf den Desktop gezaubert:
Code:
  1. procedure TfmDesktop.EmbedDesktop(X,Y,W,H:integer);
  2. var hd:THandle;
  3. begin
  4.   condesk.ActiveDesktopEnabled:= false;
  5.   hd:= FindWindow('Progman','Program Manager');
  6.   hd:= GetWindow(hd,GW_CHILD);
  7.  
  8.   ParentWindow:= hd;
  9.  
  10.   ShowWindow(Handle,SW_SHOWNORMAL);
  11.   SetWindowPos(Handle,HWND_BOTTOM,X,Y,W,H,0);
  12. //  SendToBack;
  13.   condesk.ActiveDesktopEnabled:= true;
  14. end;


Interessant ist: ich hab auf dem Form zwei Label, ein Edit, ein Panel und einen Button. Die Label kommen an, der Rest nicht. Scheint so, als ob jedes Windows-Control Probleme macht. Seltsam...

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 29, 2006 12:45 
Offline
DGL Member
Benutzeravatar

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

ich hab da auch mal in die Richtung recherchiert.
Ich habe 2 Möglichkeiten gefunden:
1. Per DirectX (irgendwas dadrin, keine ahnung was genau) nen Layer erstellen auf dem man zeichnet (geht aber nicht mit OGL glaub ich)
2. Bei aktiviertem Active Desktop ein ActiveX Control als Hintergrund wählen indem man es in eine HTML seite packt und diese Seite als Hintergrundbild auswählt. In diesem ActiveX kann man dann ganz normal mit OGL zeichnen. Allerdings gibt es da probleme, da das ActiveX Control die Mausklicks abfängt, so dass man sie irgendwie manuell an den Desktop weiterleiten muss um den normalen Desktop zu imitieren.
http://www.sulaco.co.za/opengl.htm auf der Seite findest du ein Beispiel ActiveX Control mit OGL ...

Gruss
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  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 29, 2006 15:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Ich hab jetzt immerhin die Problemstellung so umgebogen, dass ich nur noch ein Bild draufkreiegn muss. Dazu möchte ich ein Element für den ActiveDesktop erzwugen, aber das geht nicht. Hat da einer funktionierenden Code(auch C(++/#))?
Mein Code:
Code:
  1. procedure TfmDesktop.EmbedDesktop(X, Y, W, H: integer);
  2. const
  3.   CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
  4.   sWinTitle            = 'Statistic Window';
  5. var
  6.   ActDesktop : IActiveDesktop;
  7.   ComponentsOpt: TComponentsOpt;
  8.   ShComponent:TShComponent;
  9.   cnt,i:integer;
  10.   dwReserved:DWORD;
  11.   s:string;
  12. begin
  13.   ActDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
  14.   ComponentsOpt.dwSize := SizeOf(TComponentsOpt);
  15.   dwReserved:= 0;
  16.   // sicherstellen, dass ActiveDesktop an ist
  17.   ActDesktop.GetDesktopItemOptions(ComponentsOpt,dwReserved);
  18.   ComponentsOpt.fActiveDesktop:= true;
  19.   ActDesktop.SetDesktopItemOptions(ComponentsOpt, dwReserved);
  20.   // ?????  Weiß nicht, ob Apply notwendig ist. Ohne scheitert aber die nächste Anweisung.
  21.   ActDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  22.  
  23.   // altes Element löschen, falls da
  24.   ActDesktop.GetDesktopItemCount(cnt,dwReserved);
  25.   for i:= 0 to cnt-1 do begin
  26.     ActDesktop.GetDesktopItem(i,ShComponent,dwReserved);
  27.     if IsSameText(ShComponent.wszFriendlyName, sWinTitle) then
  28.       ActDesktop.RemoveDesktopItem(ShComponent,dwReserved);
  29.   end;
  30.  
  31.   //Das Bild erzeugen:
  32.   WriteChanges;
  33.  
  34.   // neues Element erzeugen
  35.   ZeroMemory(@SHComponent,SizeOf(TSHComponent));
  36.   with ShComponent do begin
  37.     dwSize := SizeOf(TSHComponent);
  38.     with cpPos do begin
  39.       dwSize:= sizeof(TCompPos);
  40.       iLeft:= X;
  41.       iTop:= Y;
  42.       dwWidth:= W;
  43.       dwHeight:= H;
  44.       fCanResize:= false;
  45.     end;
  46.     iComponentType:= COMP_TYPE_PICTURE;
  47.     fChecked:= true;
  48.     s:= appSettings.FilePath('resource\in_use\desktop.png');
  49.     StringToWideChar(s,wszSource,length(s));
  50.     StringToWideChar(sWinTitle,wszFriendlyName,length(sWinTitle));
  51.   end;
  52.   ActDesktop.AddDesktopItemWithUI(Handle,ShComponent,dwReserved);
  53. //ActDesktop.AddDesktopItem(ShComponent,dwReserved);
  54.   ActDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
  55.   // kein Fehlercode, trotzdem kein DesktopItem da.
  56. end;

appSettings.Filepath() erzeugt vollstängig Qualifizierte Dateinamen.

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 31, 2006 01:32 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
The-Winner hat geschrieben:
Eine primitive Lösung: (Aktive-Desktop aus, einfacher Bildhintergrund)
1. Pfad zum Bild aus der Registry auslesen
2. Bitmap in Desktopgröße erzeugen und in Desktop-Hintergrundfarbe anmalen
3. Bild entprechend dem Angaben in der Registry auf das Bitmap zeichnen
4. Deine Infos auf das Bitmap schreiben
5. Das Bitmap speichern als Hintergrund setzen
6. Desktop-Refresh auslösen


Du wirst es nicht glauben, aber ich hab das dann jetzt doch so gemacht. Funzt super und ist auch zuverlässiger.

OT: erster Post auf neuem Server. Naja, zu so einer kranken Uhrzeit...

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 09, 2006 17:58 
Offline
DGL Member
Benutzeravatar

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

ich weiß nicht ob das immer noch interessant ist, aber ich bin durch Zufall grad über diesen Thread gestolpert:
http://www.gamedev.net/community/forums ... _id=407635
ein Link dadrin führt zu folgender Seite:
http://www.dhpoware.com/demos/glLayeredWindows.html

ich habs mir nicht genau angeschaut und weiß daher nicht, obs wirklich das ist was du willst, aber evtl hast du ja trotzdem Lust dir das anzuschaun ...

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  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 10:36 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Müsste man nicht auch sich das DC des Desktop's holen können und darauf nen RC erstellen?

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: Di Aug 15, 2006 10:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Doch doch. Wenn du glück hast klappt das auch. Allerdings besteht der Desktop aus mehreren Fenstern. Mit der GDI funktioniert das. Allerdings mit einer kleinen Einschränkung. Die Icons und die Fenster werden auf dieses DC gezeichnet. Wenn du jetzt also auch etwas auf diesen DC zeichnest übermals du fröhlich einmal alles was da existiert. Und das ist ja nicht ganz so gewollt gewesen, oder?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 11:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Lossy eX hat geschrieben:
Doch doch. Wenn du glück hast klappt das auch.

Nur, wir haben kein Glück. Ich habs grade nochmal versucht, auf das SysListview32 ein HDC und HGLRC zu kriegen, klappt aber nicht.
SetPixelFormat() in CreateRenderingContext scheitert: "Systemfehler. Code: -1073283066."

_________________
Gott sei Dank bin ich Atheist!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 12:01 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja Ja. Das musst du wenn dann auch händisch machen. Und dann einfach des Resultat von SetPixelFormat ignorieren. Man kann nur ein mal SetPixelFormat pro Fenster aufrufen. Und das wurde da schon gemacht.

Aber ich habe das Gefühl du hast meinen Text nicht zu Ende gelesen. Auch wenn man da einen RC drauf erstellen kann hast du immer noch das Problem, dass du über die Icons und Fenster drüber malst. Und das sieht nicht so wirklich gut aus. Speziell beim Beenden. Außerdem wäre das dann auch überhaupt wie Vollbildmodus.

Aber ich weiß jetzt auch nicht ob man darauf überhaupt einen RC erstellen kann. Hatte das schon mal ausprobiert aber ist zu lange her. Und wenn dann hätte man auch das Problem, dass man keinen Einfluss auf das Pixelformat hat. Und dann kann man das auch vergessen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 15, 2006 12:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Mai 29, 2006 21:13
Beiträge: 142
Wohnort: Ballenstedt/Sachsen-Anhalt
Doch doch, gelesen hatte ich deinen Text schon. Es ging mir nur um die Machbarkeit, nicht ob das dann noch Sinn macht.

_________________
Gott sei Dank bin ich Atheist!


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


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.013s | 17 Queries | GZIP : On ]