Announcement

Collapse
No announcement yet.

Symbol-Icon zur Laufzeit ändern

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

  • Symbol-Icon zur Laufzeit ändern

    Hallo!

    Gibt es eine Möglichkeit das Icon meines Programmes während der
    Laufzeit aus einer anderen exe-Datei zu benutzen.
    Meine Anwendung soll zum Beispiel wenn es gerade gestartet wurde
    das Symbol von "Notepad.exe" haben und wenn ich einen Button drücke
    das Symbol von "MsPaint.exe".

    Tschüss Tim

  • #2
    Hallo,

    ja - das ist möglich. Das folgende Beispiel demonstriert, wie man das Symbol sowohl im eigenen Formualar als auch in der dazugehörigen Schaltfläche in der Taskbar um beliebige Icons umstellen kann:
    <pre>
    unit Unit1;

    interface

    uses
    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
    StdCtrls;

    type
    TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    private
    { Private-Deklarationen }
    FIcon : HICON;
    public
    { Public-Deklarationen }
    end;

    var
    Form1: TForm1;

    implementation

    {$R *.DFM}

    uses ShellAPI;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    if FIcon <> 0 then
    DestroyIcon(FIcon);
    FIcon := ExtractIcon(hInstance, PChar('C:\WINNT\Notepad.exe'), 0);;
    // zuerst eigenes Formular
    SendMessage(Handle, WM_SETICON, ICON_SMALL, FIcon);
    // dann Symbol in der Taskbar (verstecktes Application-Fenster)
    SendMessage(Application.Handle, WM_SETICON, ICON_SMALL, FIcon);
    end;

    procedure TForm1.Button2Click(Sender: TObject);
    begin
    if FIcon <> 0 then
    DestroyIcon(FIcon);
    FIcon := ExtractIcon(hInstance, PChar('C:\WINNT\Regedit.exe'), 0);;
    SendMessage(Handle, WM_SETICON, ICON_SMALL, FIcon);
    SendMessage(Application.Handle, WM_SETICON, ICON_SMALL, FIcon);
    end;

    procedure TForm1.FormDestroy(Sender: TObject);
    begin
    if FIcon <> 0 then
    DestroyIcon(FIcon);
    end;

    end.
    </pre&gt

    Comment


    • #3
      Hallo!

      Danke für die Antwort!
      Aber es gibt noch ein kleines Problem, dass das Symbol im Explorer nicht verändert wurde.
      Ich denke, dass diese Aufgabe noch etwas schwieriger zu bewältigen ist, denn der Code der exe-Datei müsste geändert werden.

      Tschüss..

      Comment

      Working...
      X