Announcement

Collapse
No announcement yet.

CopyIcon + Application.Icon.Handle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • CopyIcon + Application.Icon.Handle

    Hallo<p>
    Ich verwende DLL-Aufrufe zur gestaffelten Anzeige von Formularen, wie z.b. Exe-Formular <I>Programmauswahl</I> -> DLL-Formular <I>Auswertung</I> -> DLL-Formular <I>DruckVorschau</I>.<p>
    Um nicht in jede DLL das Formularicon eingebinden zu müssen, übergibt das aufrufenden Modul über den Funktionsaufruf sein <I>Application.Icon.Handle</I> an das angeforderte Modul.<br>
    param.hndIcon := Application.Icon.Handle;<p>
    Das angeforderte Modul kopiert über die Anweisung<br>
    Application.Icon.Handle := CopyIcon(param.hndIcon);<br>
    das Icon als Standardvorgabe in seine Formulare<p>
    Dieser Weg hat regelmäßig funktioniert. Nun mußte ich bei einem Weg feststellen, daß nach dem Aufruf von<br>
    Loadlibrary<br>
    das Icon.Handle des aufrufenden Moduls ins Leere läuft (Die Ausgabe des Icons auf Festplatte führt zu einem Fehler!). Das Icon der Druckvorschau sowie der Taskleiste ist zerschossen.<p>
    Zur Lösung könnte ich mir den Eingangswert aus der Exe zum Durchreichen merken. Da wir z. Zt. auf Fehlersuche sind interessiert mich jedoch die Ursache des Problems.

    MFG Uwe

  • #2
    Um das Icon der Application an die DLL zu übergeben verwende ich einen Pointer auf das IconHandle als Übergabeparameter.
    .
    Prog:
    var
    vIcon: HICON;
    begin
    vIcon := Application.Icon.Handle;
    DllIcon(@vIcon);
    end;
    .
    DLL:
    var
    fIcon: HICON = 0;
    .
    procedure DllIcon(pIcon: Pointer); stdcall;
    begin
    fIcon := HICON(pIcon^);
    end;
    .
    und beim Aufruf des DLL-Formulares:
    FrmDll.Create(nil);
    if fIcon <> 0
    then FrmDll.Icon.Handle := CopyIcon(fIcon);
    .
    .
    Gruß
    Gunna

    Comment

    Working...
    X