Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-8894
Ольга
2002-01-16 14:01
2002.02.04
Инсталлятор


4-9028
fag2000@ok.ru
2001-12-07 12:44
2002.02.04
Как удалить OLE объект во время выполнения его метода


1-8851
Dennis S
2002-01-16 11:42
2002.02.04
Событие на Мышь


1-8823
dzk
2002-01-20 00:54
2002.02.04
Загрузка из ресурса текста в кавычках


6-8968
atmospheric
2001-11-12 17:15
2002.02.04
NMHTTP !!!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский