Форум: "Основная";
Текущий архив: 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); затыкается и все, Виндовз висит круто, только рзет спасает...
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.04;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c