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




Вниз

Как передать иконку? 


SlavaNew   (2002-01-14 12:50) [0]

Создал DLL в которой зашита форма.
Как сделать чтобы иконка у этой формы была такая же как и у программы, вызывающей эту DLL?



Yuri-7   (2002-01-14 13:52) [1]

1. Передай Application.Handle в DLL
2. При активизации формы задай:
Form1.Icon.Assign(Application.Icon);



SlavaNew   (2002-01-15 05:35) [2]

Пробовал так.
Выдается ошибка "Cannot assign a TIcon to a TIcon" ;о((
Что делать?
Может я что не так в DLL написал?



SlavaNew   (2002-01-15 12:17) [3]

Неужели не возможно?



Yuri-7   (2002-01-15 13:41) [4]

Попробуй так. Я пробывал - получается.

В DLL:

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure showform(AH: THandle;AIcon:THandle);stdcall;
exports showform;
var
Form1: TForm1;

implementation
{$R *.DFM}
procedure showform(AH: THandle;AIcon: THandle);
begin
Application.Handle:=AH;
try
Form1:=TForm1.Create(Application);
Form1.Icon.Handle:= AIcon;
Form1.ShowModal;
finally
Form1.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Close;
end;

end.

А в вызывающей программе:...
procedure showform(AH: THandle;AIcon: THandle); stdcall; external "project1.dll";

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
showform(Application.Handle,Application.Icon.handle);
end;



ValeraVV   (2002-01-15 17:17) [5]

Откомпилируй DLL и EXE с packages (хотя бы только с VCL50) и Assign будет работать.



SlavaNew   (2002-01-16 06:24) [6]

> Yuri-7
Я DLL загружаю динамически. И делаю точно так же как и ты написал, но...
При первом вызов функции из DLL иконка передается нормально, но если второй раз вызвать функцию, то иконкой становиться виндовый логотип.

Функция в DLL

function GetStrAll(AppHandle: THandle; Ic: THandle): PChar; stdcall;
begin
Application.Handle:=AppHandle;
DllForm := TDllForm.Create(Application);
DllForm.Icon.Handle:=Ic;
DllForm.ShowModal;
Result:=PChar(AllString);
DllForm.Free;
end;

Вызываю так:

GetStrAll: function(AppHandle: THandle; Ic: THandle): PChar; stdcall;

procedure TForm1.Button1Click(Sender: TObject);
Var HandleN: THandle;
GetStr: String;
begin
@GetStrAll:=Nil;
HandleN := LoadLibrary("Nabor.dll");
If HandleN >= 32 Then
Begin
@GetStrAll:=GetProcAddress(HandleN, "GetStrAll");
If @GetStrAll<>Nil Then
GetStr:=StrPas(GetStrAll(Application.Handle, Application.Icon.Handle));
End;
FreeLibrary(HandleN);
end;



Yuri-7   (2002-01-16 10:00) [7]

Попробуй статически описать функцию. У меня в примере - сколько раз не вызывай, все время передается нормально. Если все-таки не получиться, сообщи, я еще посмотрю.



SlavaNew   (2002-01-16 10:50) [8]

Статически тоже самое, даже еще хуже...
На DllForm := TDllForm.Create(Application); затыкается и все, Виндовз висит круто, только рзет спасает...




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




Наверх





Память: 0.73 MB
Время: 0.038 c
1-8904            Filat                 2002-01-14 20:50  2002.02.04  
Как создать в Word и вывести на печать страницу


3-8801            Oleg Fomicheff        2001-12-31 05:18  2002.02.04  
Не могу создать индекс с параметром Unique ;(((


1-8935            СергейКнязев          2002-01-17 17:00  2002.02.04  
Повторяю, СРОЧНО!!!!!!. Загрузка из Excel


7-9016            Trot                  2001-10-12 06:47  2002.02.04  
Перехват обращения к LPT!


4-9044            valery_f              2001-12-03 14:37  2002.02.04  
WaveOutxxx