Page 1 of 2 1 2 LastLast
Results 1 to 15 of 20

Thread: Icoon in melding via DLL

  1. #1
    Registered User Chinchie's Avatar
    Join Date
    Mar 2004
    Location
    Genk,Belgium
    Posts
    19

    Icoon in melding via DLL

    Hoi iedereen,

    ik zit met het volgende probleem.

    Ik heb een applicatie (exe) die een dll oproept. Op de invulschermen van de DLL staat het icoontje van het bedrijf, idem als op de schermen van de exe zelf. Indien er een fout optreedt vanuit de schermen van de DLL wordt een FisMessageBox getoond met de juiste melding en knoppen etc... FisMessageBox is een soort MessageBox met uitgebreide mogelijkheden die hier intern door het bedrijf ontwikkeld is.
    Als parameter wordt hier oa ook de parent meegegeven onder naam van Application. De FisMessageBox pakt dan het icoontje van de parent om zelf te gebruiken als icoon en zo een verzorgde melding te geven. Het probleem is dat als ik de DLL als parent meegeef, hij geen icoontje vindt omdat ik geen icoon aan een DLL kan koppelen en dus het standaardicoontje toont. Vanuit de exe is dat geen probleem omdat hier wel een icoontje aan gekoppeld is. Hoe kan ik dit het best oplossen zonder aanpassingen te doen aan FisMessageBox ?

    Dit component wordt door het hele bedrijf gebruikt voor verschillende producten en zou teveel tijd en energie vragen. Aanpassingen in exe en dll zelf zijn geen probleem.

    Slukes

    Chinchie

  2. #2
    Als ik je goed geeft die DLL de informatie mee. Kun je de DLL niet zo aanpassen dat hij niet zijn eigen informatie meegeeft, maar die van zijn host application?
    Marcel

  3. #3
    Senior Member PsychoMark's Avatar
    Join Date
    Nov 2001
    Location
    Raamsdonksveer
    Posts
    10,269
    Wat bedoel je met "de parent meegeven"... is dat het bestandspad, een window handle, iets anders? Het zal geen probleem zijn een icoon in de DLL te plaatsen, de methodiek is echter sterk afhankelijk van hoe FisMessageBox de extractie uitvoert...
    Qui custodiet ipsos custodes

  4. #4
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Als ik het goed begrijp wil je het icoon van Application weergeven in de messagebox (die in een DLL zit)?
    Ik snap ook het verschijnsel "Parent" niet.

  5. #5
    Registered User
    Join Date
    Jan 2005
    Location
    helmond.nl
    Posts
    20
    Je zou natuurlijk ook gewoon het icoon in de resource van de dll kunnen pleuren.. en dan daar rekening mee houden..

  6. #6
    Registered User Chinchie's Avatar
    Join Date
    Mar 2004
    Location
    Genk,Belgium
    Posts
    19
    Ik heb een applicatie (EXE met het juiste icoontje), deze roept de DLL op en geeft de Application.Handle mee. De DLL start een schermpje op en van daar uit wordt een foutmelding gegeven met FisMessageBox. Aan FisMessageBox geven we weer de Application.Handle mee van de DLL, maar deze heeft geen icoontje, dus toont FisMessageBox het standaardicoontje. De Handle van de exe neemt hij niet aan.

    Ik heb het opgelost door rechtstreeks in de code van de DLL het icoontje fysiek op schijf te gaan lezen en dit in code aan de DLL toe te kennen. Blijkbaar werkt dit wel, maar kanik in de project settings geen icoontje toekennen aan de DLL.

    Thanks voor de reacties.

  7. #7
    Registered User
    Join Date
    Jan 2005
    Location
    helmond.nl
    Posts
    20
    Dit komt vanwege boundaries volgens mij, je kunt geen icon handle doorgeven van de ene proces naar het andere (In iedergeval bij mij werkte het niet toen ik dit probeerde juist van de dll naar de applicatie te doen, ik moest in de applicatie LoadFromResource ofzoiets gebruiken..

  8. #8
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    1)
    declareer een array of byte ter grootte van het aantal bytes van het icon
    2)
    Schrijf de icon.data uit een form.dfm waarie toevallig voorkomt weg als hexbytes naar een tempfile
    3) fabriceer daar die array van of schrijf hem meteen weg als array voor cut en paste
    4) paste de array in je code
    5) Memorystream op de array pointer en Icon.loadfromstream
    Dit hoeft allemaal maar een keer. Daarna bewaar je de unit voor als je hen nodig hebt.

  9. #9
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    en Icon.LoadFromFile dan
    !

  10. #10
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    Het moet in de dll zitten. Loadfromfile doe je niet in pro software, niet voor icons.

  11. #11
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Maar als je toch een tempfile maakt kun je net zo goed de icon.LoadFromFile gebruiken toch?
    !

  12. #12
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    Nee de truc is nou juist dat dat tempfile maar een keer nodig is: *voor* je compileert!
    Dit is een manier of een custom resource te maken, begijp je? Je doet dus wat werk vooraf, om een custom resource voor je dll over te houden.

    Dit is trouwens ook een goeie truc om je code wat minder goed decompileerbaar te maken.

  13. #13
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Ah zo.. Maar waarom dan geen resource gebruiken?
    !

  14. #14
    Senior Member Thaddy's Avatar
    Join Date
    Dec 2004
    Location
    Amsterdam
    Posts
    2,211
    Omdat dat nou juist de kern van de vraagstelling was! Hij kan niet bij zijn icon!

    pseudo code, niet compleet, ter illustratie

    Je houdt een array over zoals:
    Code:
    const
    IconArray:array[0..iconsize-1] of byte =($FF,$00,$44 etc
    
    Type
     Tmymemstream = class(TcustomMemorystream)
     public
       procedure setpointer(value:Pointer);// is gedeclareerd als protected in CustomMemorystream
    end;
    
    begin
      Stream:=TMymemstream.create;
      Stream.size:=high(IconArray)+1;
      Stream.setpointer(@IconArray[0]);
      Icon.Loadfromstream(Stream)
    end.
    Last edited by Thaddy; 25-Jan-05 at 21:42.

  15. #15

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

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

Similar Threads

  1. DLL vrijgeven vanuit een DLL
    By Pray in forum Algemeen
    Replies: 6
    Last Post: 20-Nov-04, 13:25
  2. Replies: 9
    Last Post: 11-Oct-04, 17:05
  3. Replies: 11
    Last Post: 15-Jan-04, 16:54
  4. Replies: 16
    Last Post: 08-Jan-04, 10:35
  5. Database benaderen in DLL
    By Frodo in forum Databases
    Replies: 20
    Last Post: 19-Dec-02, 22:33

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
  •