Avatar billede hermandsen Juniormester
21. juni 2002 - 16:28 Der er 21 kommentarer og
1 løsning

Tegne ikon til tray inde i Delphi

Hej Eksperter...

Jeg er ved at lave en MailTjekker som jeg gerne vil have ligger nede i tray'en. Når den så har fundet ud af at der er nye mails på serveren skal den skrive antallet af nye mails i tray'en med et ikon.

Jeg skal altså tegne det ikon der skal ligge i tray'en fra gang til gang, og så opdatere det når jeg har fundet nye mails.

Et statisk ikon er fuldstændig udelukket!

//hermandsen
Avatar billede martinlind Nybegynder
21. juni 2002 - 17:18 #1
Har du lavet koden til at "tray-tingen", så skal du vel "bare" lave en TIcon også tegne på dens canvas, som med en TBitmap

/Martin
Avatar billede hermandsen Juniormester
21. juni 2002 - 17:27 #2
Ja, alt til MinimizeToTray er lavet... Jeg skal bare ha' fremstillet det ikon med en mulighed for at tegne på Canvas... Der findes bare ikke en canvas under TIcon-typen! :(
Avatar billede martinlind Nybegynder
21. juni 2002 - 17:38 #3
Så skal du nok omkring API'et, Kig på 

CreateIconIndirect();

/Martin
Avatar billede hermandsen Juniormester
21. juni 2002 - 17:48 #4
Hmmm... Den skal bruge en record der ser således ud:

_ICONINFO = packed record
  fIcon: BOOL;
  xHotspot: DWORD;
  yHotspot: DWORD;
  hbmMask: HBITMAP;
  hbmColor: HBITMAP;
end;

Men hvad de forskellige variabler, og hvilke skal jeg bruge?

En HBITMAP er bare en LongWord...
Avatar billede martinlind Nybegynder
21. juni 2002 - 17:53 #5
HBitmap kan du finde på en TBitmap jeg mener det er Handle men det kan du se i hjælpen, også er det bare at komme igang med er lege/forsøge ( try, try and try again :-) ), Hotspot kan du vist nok sætte til 0,0 i første omgang.

/Martin
Avatar billede hermandsen Juniormester
21. juni 2002 - 17:54 #6
Har fundet lidt i hjælpen, men svar gerne hvis du har noget! :)
Avatar billede martinlind Nybegynder
21. juni 2002 - 17:58 #7
Jeg har ikke prøvet at tegne Icon'er, så dit bud er lige så godt som mit
Avatar billede hermandsen Juniormester
21. juni 2002 - 18:01 #8
Hehe... Okay... Så lærer vi jo begge noget! ;)
Avatar billede hermandsen Juniormester
21. juni 2002 - 18:04 #9
Hvad er den store forskel egentlig på CreateIconIndirect og CreateIcon... Er det ikke bedre/lettere at bruger CreateIcon?
Avatar billede martinlind Nybegynder
21. juni 2002 - 18:08 #10
Jo det kunne godt se sådan ud :)
Avatar billede hermandsen Juniormester
21. juni 2002 - 20:50 #11
Okay... Nu har jeg følgende:

type
  TMap = array [1..16, 1..16] of Byte;
var
  Davs: _ICONINFO;
  Map: ^TMap;
begin
  Icon.Handle := CreateIcon(HInstance, 16, 16, 1, 8, Map, Map);
end;

Så skal jeg bare kunne tegne i mit Map, men hvordan? Det ville nok være RET meget bedre med et rent billede, men ved ikke helt hvilken datatype jeg skal bruge uden at få en masse overflødigt med...
Avatar billede hermandsen Juniormester
21. juni 2002 - 20:52 #12
Jeg er forresten ikke helt sikker på parameterne, men den laver da et ikon... Godt nok et mærkeligt et, men stadig et ikon! :)
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:04 #13
ARGH!!! Hadder pointere... Har aldrig haft brug for dem før nu... Nå, men det ser altså underligt ud det jeg få frem... Nogle ideer?

Ignorer forresten lige den der Davs-variabel... Det var tidligere kode... ;)
Avatar billede martinlind Nybegynder
21. juni 2002 - 21:09 #14
procedure TForm1.Button1Click(Sender: TObject);
VAR
  S : _ICONINFO;
  B : TBitMap;
  I : TIcon;
begin
  B := TBitMap.Create;
  //B.Canvas.TextOut(1,1,'X');
  B.Canvas.Brush.Color := clRed;
  B.Canvas.FillRect(B.Canvas.ClipRect);

  S.fIcon := TRUE;
  S.xHotspot := 0;
  S.yHotspot := 0;
  S.hbmMask := B.Handle;
  S.hbmColor := B.Handle;

  I := TIcon.Create;
  I.Handle := CreateIconIndirect(S);
  if I.Handle = Null then ShowMessage('Fejl');
  Image1.Picture.Icon.Assign(I);
  Image1.Refresh;
end;
Avatar billede martinlind Nybegynder
21. juni 2002 - 21:09 #15
Viser ikke en skid, men kommer heller ikke med en "Fejl"
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:14 #16
Hmmm... Mit var i hvert fald ikke ret godt... Jeg tror aldrig jeg har set så mange fejl!!! :/
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:19 #17
Er du forresten sikker på at hbmMask og hbmColor skal ha' den samme handle?

Det er i hvert fald hvad jeg ser som det eneste der kan være galt...
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:27 #18
Hmm... Jeg så lige noget...

Hvis du skriver

  Image1.Picture.Icon.Assign(Icon);

Så skulle den sætte formens ikon ind på image1, men der sker ikke noget! :/
Avatar billede martinlind Nybegynder
21. juni 2002 - 21:30 #19
Du kan prøve at lave To bitmap's.
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:34 #20
Sorry... Jeg roder rundt i forskellige events...

Nu er jeg med igen! ;)

Dit virker, der kommer bare ikke noget endnu!
Avatar billede hermandsen Juniormester
21. juni 2002 - 21:46 #21
Yes... Jeg tror jeg har fundet noget... Læser lige i gennem! ;)

http://www.dts.nl/support/helpdesk/delphi/300/d222200282.htm
Avatar billede hermandsen Juniormester
21. juni 2002 - 22:10 #22
Okay... Jeg har fundet noget der virker, så skal det bare videre udvilkes, men det jeg skulle bruge virker nu! Tusind tak for hjælpen, og tak for i aften! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester