[Delphi] form weg uit taakbalk

Pagina: 1
Acties:

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
Om te beginnen: ja, ik heb gezocht. Zowel hier, als op NLDelphi, als op Google, maar niks bevatte wat ik zoek.

Ik heb een Winamp plugin gemaakt. Deze maakt bij het starten een onzichtbare Form. Ik wil hem echter ook niet op de taakbalk hebben staan. Het moet dus compleet onzichtbaar zijn.
Ik kan helaas geen formloze applicatie (dll) maken, omdat je dan (voor zover ik weet) geen Timer kan plaatsen.

Op meerdere plekken zag ik dit staan:
code:
1
2
3
4
// Zet dit tussen Application.Initialize en je eerste CreateForm.
ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
if ExtendedStyle > 0 then
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle or WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);


Dit werkt alleen niet, want omdat ik er een dll van maak, herkent hij Application niet. Self.Handle werkt ook niet.


Is het mogelijk om een totaal onzichtbare dll te maken? Misschien dat ik toch een Timer kan plaatsen op een formloze dll?
Ik hoop dat het een beetje duidelijk is wat ik bedoel. Zo niet, dan kan ik misschien een plaatje maken van wat ik bedoel.

Full-stack webdeveloper in Groningen


Verwijderd

Moet die Application.Handle niet je form1.hwnd (of form.handle) zijn ?? lijkt me handiger.

  • Schmoove
  • Registratie: Juli 2001
  • Laatst online: 14:50
Waarom zou je geen formloze applicatie kunnen maken?
Je kunt een Timer toch ook gewoon dynamisch aanmaken? Gewoon een TTimer object declareren en een eventhandler eraan koppelen.

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
:| Zo makkelijk is het dus... Heel erg bedankt, het werkt nu prima!

Full-stack webdeveloper in Groningen


Verwijderd

Schmoove schreef op 30 december 2003 @ 21:11:
Waarom zou je geen formloze applicatie kunnen maken?
Je kunt een Timer toch ook gewoon dynamisch aanmaken? Gewoon een TTimer object declareren en een eventhandler eraan koppelen.
Kan idd ook prima. Nog makkelijker en je hebt de overhead van je form niet.
ZanderZ schreef op 30 december 2003 @ 21:12:
:| Zo makkelijk is het dus... Heel erg bedankt, het werkt nu prima!
Hoe heb je het nu opgelost ? dynamisch timer aanmaken of, die handles veranderd?

[ Voor 26% gewijzigd door Verwijderd op 30-12-2003 21:13 ]


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
Ja, zou ook kunnen. Scheelt misschien ook weer in bestandsgrootte. Is de moeite waard om te proberen natuurlijk

maui: in de formcreate de handle aangepast

[ Voor 18% gewijzigd door Spinal op 30-12-2003 21:13 ]

Full-stack webdeveloper in Groningen


  • Schmoove
  • Registratie: Juli 2001
  • Laatst online: 14:50
En het is wel zo netjes.
Een form aanmaken en vervolgens niet gebruiken is niet echt kosjer programmeren he. Maar goed uiteindelijk heeft het hetzelfde effect natuurlijk.

  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
Nee, het is inderdaad niet echt netjes. Nu nog uitzoeken hoe ik een Timer moet maken :S Het wil maar niet lukken. Maar goed, dat zal uiteindelijk ook wel lukken

Full-stack webdeveloper in Groningen


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 12:32

Reptile209

- gers -

ZanderZ schreef op 30 december 2003 @ 21:36:
Nee, het is inderdaad niet echt netjes. Nu nog uitzoeken hoe ik een Timer moet maken :S Het wil maar niet lukken. Maar goed, dat zal uiteindelijk ook wel lukken
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
type
  MyClass = class(...)
  private
    MyTimer: TTimer;
    procedure OnTimer(Sender: TObject);

end;  

procedure MyClass.InitTimer
begin
  MyTimer := TTimer.Create(nil);
  MyTimer.OnTimer := OnTimer;
  MyTimer.Interval := 1000;
  MyTimer.Enabled := true;
 
end;

procedure MyClass.OnTimer(Sender: TObject)
begin
  ...
end;


In de code die de dll opruimt nog wel even een MyTimer.Free; opnemen.

[/UitHetHoofdModus] :)

edit:
This message was updated with info from LordLarry and www.google.nl :)

[ Voor 15% gewijzigd door Reptile209 op 31-12-2003 10:02 ]

Zo scherp als een voetbal!


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Kleine toevoeging op Reptile209's uitstekende antwoord:

Je kan hier geen Self meegeven als Owner in de constructor van de TTimer, want Self is hier (waarschijnlijk) niet afgeleid van TComponent wat Owner is. Het alternatief is bijvoorbeeld nil. Dat betekend dat je niet kan vertrouwen op de Owner om de Timer vrij te geven, want er is geen Owner. Je klasse MyClass zal het dus zelf moeten doen. De Destructor van je MyClass is daar een uitstekende plaats voor.

Ook zal je merken dat de declaratie van de OnTimer procedure niet helemaal naar wens van de compiler is, want die heeft nog wel wat parameters. Welke dat precies zijn kan je wel vinden neem ik aan.

We adore chaos because we like to restore order - M.C. Escher


  • Spinal
  • Registratie: Februari 2001
  • Laatst online: 15-05 11:48
Bedankt, hier heb ik wat aan denk ik :)

Full-stack webdeveloper in Groningen

Pagina: 1