Главная страница
    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-8887
KvORubin
2002-01-16 19:07
2002.02.04
Memo1 или RichBox1.


1-8870
NY152
2002-01-15 09:59
2002.02.04
Подскажите, где поставить проверку...


14-8985
perov
2001-12-14 06:04
2002.02.04
С праздником!!!!!!


1-8839
Tym
2002-01-21 00:47
2002.02.04
обращение к функциям Mathcad из Delphi!


1-8830
ТеньЛуны
2002-01-15 11:14
2002.02.04
Пару дней назад...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский