Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Вниз

Как мне изменить иконку программы, из своей? 


Bodia   (2002-01-30 19:11) [0]

У меня проблема, мне нужно из своей программы менять иконку дрогой программы, как ето можно сделать в Делфи?

зарание благодарен!



Dimaond Cat   (2002-01-31 00:44) [1]

К примеру этот код поменяет иконку на стандартном калькуляторе
sendmessage(findwindow(nil,"Калькулятор"),wm_seticon ,ICON_Big,image1.Picture.Icon.Handle);
естественно для начала надо загрузить в image1 иконку.



Dimaond Cat   (2002-01-31 00:49) [2]

а вобще лучше полноценный пример
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
Image1: TImage;
UpDown1: TUpDown;
Edit1: TEdit;
OpenDialog1: TOpenDialog;
Label1: TLabel;
SaveDialog1: TSaveDialog;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure UpDown1Click(Sender: TObject; Button: TUDBtnType);
procedure OpenDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure Image1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

procedure TForm1.UpDown1Click(Sender: TObject; Button: TUDBtnType);
begin
if opendialog1.FileName<>"" then
image1.Picture.Icon.Handle:= ExtractIcon(hinstance,Pchar(opendialog1.filename),strtoint(Edit1.text)-1);
end;

procedure TForm1.OpenDialog1CanClose(Sender: TObject;
var CanClose: Boolean);
begin
Label1.Caption:="Колличество иконок ("+inttostr(ExtractIcon(hinstance,Pchar(opendialog1.filename),Cardinal(-1)))+")";
Updown1.Max:= ExtractIcon(hinstance,Pchar(opendialog1.filename),Cardinal(-1));
updown1.Position:=1;
updown1.OnClick(Self,btNext);
end;

procedure TForm1.Image1Click(Sender: TObject);
begin
if savedialog1.Execute then
image1.Picture.Icon.SaveToFile(Savedialog1.filename);
end;
//Можно так
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.Icon.ReleaseHandle;
Form1.Icon.Handle:=image1.Picture.Icon.Handle;
application.Icon.Handle:= image1.Picture.Icon.Handle;
end;
//А можно и так, этот способ удобнее тем что можно менять
//иконку не только у своего окна
procedure TForm1.Button3Click(Sender: TObject);
begin
sendmessage(handle, wm_seticon,ICON_BIG,image1.Picture.Icon.Handle);
sendmessage(application.handle, wm_seticon,ICON_BIG,image1.Picture.Icon.Handle);
sendmessage(findwindow(nil,"Калькулятор"),wm_seticon ,ICON_Big,image1.Picture.Icon.Handle);
end;

end.



ilg   (2002-01-31 10:47) [3]

Насколько я понимаю, этот пример меняет иконку запущенного приложения. А как поменять иконку в EXEшнике программы?



Dimaond Cat   (2002-01-31 19:00) [4]

2 ilg боюсь , что для этого придется дезассемблировать программу и подменить ее ресурсы, в принципе это возможно но практически довольно геморойно



Kirill   (2002-01-31 19:14) [5]

2ilg:
Когда-то я тоже задавался этим вопросом. Но ответа так и не получил. В инете есть компонента ExeIcon, но она только для Delphi 3 и без исходников (в ввиде dcu-файл).



Иван Шихалев   (2002-01-31 20:29) [6]

Берем доку по формату COFF, берем доку по формату RES... Если очень надо, то можно разобраться, а вот если не очень...



Tosov   (2002-01-31 20:32) [7]

В папке Дельфи\Demos\ResXplorer есть пример просмотра ресурсов.. попробуй там найти чего-нибудь полезного.



Bodia   (2002-02-02 11:13) [8]

Ну может есть, кокойто компонент?



Kirill   (2002-02-02 13:21) [9]

Есть, но только под Delphi 3.




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.01;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.03 c
14-299            Igor E. Timofeev      2002-02-19 03:24  2002.04.01  
Время жизни программы.


3-22              Dimonka               2002-03-06 10:39  2002.04.01  
Ошибка в запросе!


3-75              SerKom                2002-03-07 18:20  2002.04.01  
Почему для базы на IB (SQL Dialect 3) при использовании типа полей Date или Time


3-36              TYuri                 2002-03-07 10:26  2002.04.01  
Help, помогите срочно нужна помощь!


3-66              Malder                2002-03-08 14:37  2002.04.01  
ЛЮДИ, помогите. Такая ошибка... я ничего не понимаю