[delphi] op desktop, onder icons drawen?

Pagina: 1
Acties:

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

Topicstarter
Ik zou graag op de desktop kunnen "tekenen" zoals op een canvas, maar dan onder de icoontjes, zoals ZMatrix doet (ZMatrix emuleert die matrix code op je desktop). Ik ben al een half uur aan het google'en, torry'en en planet-source-code'en maar het enigste wat ik vind zijn functies om op de volledige desktop te tekenen, dus op alle venstertjes, icoontjes en alles wat er maar is, volledig vanboven.

Ik zoek dus een component, of functie, Ik zou dus graag willen weten hoe ik een component helemaal zelf vanaf het begin schrijf die mij een TCanvas geeft waarop ik kan tekenen en dat dat dan getoont wordt op de achtergrond, de wallpaper eigenlijk.

modbreak: indirecte script request maar even geschrapt voordat ik het hele topic dicht moet knikkeren zoals Creepy aangeeft ;)

[ Voor 24% gewijzigd door curry684 op 18-06-2003 19:13 ]

If you come here... you'll find me... I promise


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 00:45

Creepy

Tactical Espionage Splatterer

Om code of een component vragen kan worden aangezien als een script request (sterker nog, dat is gewoon een script request ;) ). En dat is niet echt de bedoeling zeg maar. Zie ook Welkom in P&W: FAQ en Beleid *updated: 14-04*

Wat heb je zelf al geprobeerd? Wat gaat er mis?
Met m.b.v. getdc en GetDesktopWindow kan je een DC (device context) krijgen naar de desktop. En op die DC is het vast wel mogelijk om te tekenen. Ik heb alleen geen idee of je dan ook onder de desktop icoontjes tekent.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Relix: bestaat niet. Je kunt een DC van het hele venster opvragen (de desktop window in dit geval) maar niet van de wallpaper: dan zou je nl. moeten interrumperen halverwege de paints van explorer.exe. Het kan echter met GetDC(NULL) knap goed hoor.

Voor creepy: GetDesktopWindow is niet nodig, GetDC(NULL) geeft al een DC voor de hele desktop :)

Professionele website nodig?


  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

Topicstarter
oeps, sorry 'bout that, ik had de rules beter moeten lezen voordat ik een thread starte |:(

ik heb dit al geprobeert:

code:
1
2
3
4
5
6
7
8
9
function WindowsDesktopCanvas: TCanvas;
var
  DC: HDc;

begin
  DC := getWindowDC(GetDeskTopWindow);
  result := TCanvas.Create;
  result.Handle := DC;
end;


maar als ik dan op die canvas teken, tekent hij gewoon helemaal boven alles, dus boven windows dat mischien open staan, of boven icoontjes. een beetje zoals je zou hebben als je je volume met je keyboard verzet, dan verschijnt er ook zo'n reeks streepjes op je scherm.

ik ga even proberen met null...

edit:

na wat onderzoek met GetDC heb ik deze code geschreven:

code:
1
2
3
4
5
6
7
8
9
var
 Canv: TCanvas;
begin
 Canv := TCanvas.Create;
 Canv.Handle := GetDC(NULL);
 Canv.Rectangle(20,20,500,500);
 Canv.Free;

end;


maar bij "Canv.Handle := GetDC(NULL);" geeft hij een error "Invaled Variant Type Conversion", alhoewel dit toch juist moet zijn aangezien GetDC een HDc resulteert en het in de code die ik eerst poste het wel lukte, dus het moet iets met die null zijn volgens mij?

edit2:

oki, ik heb die NULL verandert door 0 en nu werkt het wel, maar precies hetzelfde als die eerste code die ik postte, dus niet bepaald hoe ik zou willen dat het werkt 8)7 . En het moet wel degelijk mogelijk zijn aangezien dit programmaatje er wel in slaagd: http://download.com.com/3000-2341-10203185.html?tag=lst-0-1

[ Voor 45% gewijzigd door Relix op 18-06-2003 19:29 ]

If you come here... you'll find me... I promise


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Stomme vraag, maar ken je het concept van hoe Windows z'n tekenwerk van windowtjes e.d. regelt via Paint messages en zo? Ik denk dat die kennis je veel zou helpen :)

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Ik zei al dat GetDC(NULL) waarbij Delphi toevallig een 0 wil, hetzelfde doet als GetWindowDC(GetDesktopWindow()). Wat dat programmatje van jou denk ik doet is heel ranzig, ik gok dat ze via een windowhook paints van de explorer afvangen. Dat is volgens mij de enige manier om tussen wallpaper en icon paints in te komen.

Professionele website nodig?


  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

Topicstarter
ik ken er "iets" van ja, maar niet veel, heb er nog nooit mee gewerkt ofzo.

ik had al gedacht mischien zoekt hij de wallpaper op, load dat in z'n geheugen en kijkt waar er op de desktop-canvas pixels overeen komen met de wallpaper, met AND filters ofzo (weet er niet veel van). ik zal even googlen

If you come here... you'll find me... I promise


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Realtime JPEG's van 1600x1200 editten zonder performancehit is knap hoor :) Bovendien hertekent explorer het hele scherm als je wallpaper verandert ;)

Je wil trouwens dit zoeken: [google=WM_PAINT] en [google=SetWindowsHookEx], vooral de eerste is nuttig :+

Professionele website nodig?


  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

Uhm, GetDC(0), dat geeft toch de DC van het hele scherm en niet van het desktop :?

Daarmee heb ik een progsel gemaakt dat screenshots maakt. Daarmee zou je dus over alle windows heen tekenen. Het zou me iig niets verbazen als er een functie is die alleen het desktop zelf teruggeeft. Maar then again, tekenen ónder een window is bullshit, omdat je dat niet ziet en omdat het verloren gaat na een repaint als je het wel zou gaan zien...

日本!🎌


  • killermar
  • Registratie: Augustus 2002
  • Laatst online: 12-07 08:05
Dat ZMatrix is open source... (http://sourceforge.net/projects/zmatrix)
Je zou ff kunnen spieken in de code...
Pagina: 1