Results 1 to 9 of 9

Thread: ExtractAssociatedIcon

  1. #1
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844

    ExtractAssociatedIcon

    Goeiendag,

    Ik heb een TSpeedButton waar ik met ExtractAssociatedIcon een Glyph in wil zetten.
    Delphi Code:
    1. procedure TfrmMain.CreateButton(vPath, vParameters: string);
    2. var
    3.     vIcon:HICON;
    4.     vIndex:Word;
    5. begin
    6.   vIndex:=0;
    7.   if FileExists(vPath) then
    8.      begin
    9.         vIcon:=ExtractAssociatedIcon(HINSTANCE,PChar(vPath),vIndex);
    10.      end;
    11. end;
    De Glyph is een bitmap en geen icon, maar dat is het probleem niet. Dat is wel om te zetten lijkt me.
    Het probleem is, de volgende foutmeldingen.

    Code:
    umain.pas(103,16) Error: Identifier not found "HICON"
    umain.pas(103,16) Error: Error in type definition
    umain.pas(109,67) Error: Incompatible type for arg no. 3: Got "Word", expected "LPWORD"
    Ik heb ShellAPI in de uses staan. Als ik de cursor zet op ExtractAssociatedIcon geeft de compiler aan dat er inderdaad een HICON en een LPWORD nodig zijn.

    Via ShellAPI heb ik gezien dat de types in base.inc staan.
    Wat doe ik fout?
    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

  2. #2
    Zo compileert het wel:

    delphi Code:
    1. procedure TfrmMain.CreateButton(vPath, vParameters: string);
    2. var
    3.     vIcon: Windows.HICON; // <<-----
    4.     vIndex:Word;
    5. begin
    6.   vIndex:=0;
    7.   if FileExists(vPath) then
    8.      begin
    9.         vIcon:=ExtractAssociatedIcon(HINSTANCE,PChar(vPath),@vIndex); //<<---- derde parameter is LPWORD niet WORD
    10.      end;
    11. end;

    Geen idee of het werkt, niet getest.

    Bart

  3. #3
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Quote Originally Posted by Bart B View Post
    Geen idee of het werkt, niet getest.

    Bart
    Dat testen ga ik morgen doen.
    Kun je me uitleggen wat die '@' betekend, en waarom dat een LPWord is?
    Ik heb nergens een voorbeeld kunnen vinden met uitleg.
    BVD Bart,
    Peter.
    Carpe Diem !
    (Horatius)

  4. #4
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Die LP betekent "Long Pointer" maw het is een pointerverwijzing naar een word en dat is
    waar dat apestaartje voor zorgt.

    Een kleine discussie op StackOverflow.
    TMemoryLeak.Create(Nil);

  5. #5
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Aha.
    Dank je Peter en Bart.
    Ik heb het stuk gelezen en ik geloof zelfs dat ik het snap.

    Door een hele slechte nacht ga ik er later verder naar kijken.
    Nu eerst wat proberen te rusten.
    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

  6. #6
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Hoi,

    Die warmte nekt me elke keer weer.
    Ik kan er niet tegen. Dan heb ik rare korte slaapjes met hele gekke dromen.
    Ik werd wakker en dacht dat ik weer in het ziekenhuis lag. En dat een keer of vier.
    Anyway.

    <On topic>
    Ik heb het begrepen en heb het intussen werkend gekregen.
    Het opgehaalde icoontje zet ik in een Glyph van een TSpeedButton.
    Om dat transparant te doen merkte ik, dat net als in Delphi, eerst een TransparentColor moet worden ingesteld en dan voordat je het icoontje op de Tbitmap.Canvas tekent even een FillRect moet tekenen ter grootte van de TBitmap.Canvas.
    Thanks.
    Peter.
    Last edited by SaintPier; 09-Jul-13 at 01:02. Reason: Waardeloze zinsopbouw. :)
    Carpe Diem !
    (Horatius)

  7. #7
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Dat is mooi nieuws, top!

    Quote Originally Posted by SaintPier View Post
    Die warmte nekt me elke keer weer.
    Ik kan er niet tegen.
    Been there, done that: ik heb precies hetzelfde probleem...
    ...tot ik 8 jaar geleden een mobiele airco aanschafte.

    Oké, het is even een investering en je loopt het risico dat je verkouden raakt
    midden in de zomer (huh?), maar dat is vele malen beter dan geen nachtrust
    en rare dromen hebben.
    TMemoryLeak.Create(Nil);

  8. #8
    Senior Member SaintPier's Avatar
    Join Date
    Nov 2010
    Location
    Etten-Leur
    Posts
    844
    Quote Originally Posted by VideoRipper View Post
    Been there, done that: ik heb precies hetzelfde probleem...
    ...tot ik 8 jaar geleden een mobiele airco aanschafte.
    Ik ben bang dat ik ff geen ruimte heb voor investeringen. Die eigen bijdragen aan de zorg verzekeraar zijn meer dan verdubbeld de laatste tijd.
    Balen, want ik zou best zo'n apparaat willen aanschaffen.
    Maar het is niet anders.
    Greets,
    Peter.
    Carpe Diem !
    (Horatius)

  9. #9
    Fornicatorus Formicidae VideoRipper's Avatar
    Join Date
    Mar 2005
    Location
    Vicus Saltus Orientalem
    Posts
    5,708
    Ja, ik weet het... ik mocht die €350,= in maart alweer afrekenen.

    Toch vond ik het toendertijd de investering meer dan waard; ik heb er nog plezier van,
    vooral in deze dagen.
    TMemoryLeak.Create(Nil);

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •