Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.12;
Скачать: CL | DM;

Вниз

Cannot assign a TFont to a TFont   Найти похожие ветки 

 
prockrut ©   (2003-12-01 02:09) [0]

Скомпилил Dll, в которой есть фунция

functiun GetPanel(AOwner:TComponent):TPanel;
begin
Panel:=TPanel.Create(AOwner);
Panel.Parent:=AOwner;
Result:=Panel;
end;


из программы пытаюсь получить панель
...
Panel:=GetPanel(self); //self - допустим форма
...

в результате искючение типа не могу назначить фонт фонту.
в чем засада?


 
Passer-by   (2003-12-01 02:28) [1]

1. Переменная Panel должна быть описана - Var Panel: TPanel;
2. "Родителем" (parent) должен быть объект класса не ниже TWinControl.
Так у меня сработало, правда в dll функцию не выносил.


 
prockrut ©   (2003-12-01 02:49) [2]

function GetPanel(AOwner:TComponent):TPanel;
var
Panel:TPanel //забыл вписать просто
begin
Panel:=TPanel.Create(AOwner);
Panel.Parent:=AOwner;
Result:=Panel;
end;


Форма - порождение от TWinControl

эта комбинация не работает именно при использовании Dll.


 
Jack   (2003-12-01 03:16) [3]

Почитай внимательнее литературу. В качестве параметров функций DLL нельзя передавать компоненты. (Елманова-Трепалин-Тенцер Delphi6 и COM). Я не пробовал но попробуй помудрить с указателм.


 
Passer-by   (2003-12-01 04:33) [4]

Надеюсь, что догадываюсь в чем дело, но надо подумать.
На сейчас есть такое решение (извращение, но работает).
В dll-ке:

TFunctionGetPanel = function (AOwner: TWinControl): TPanel;

function GetPanel(FunctionGetPanel: TFunctionGetPanel; AOwner: TWinControl): TPanel;
var
Panel:TPanel;
begin
Panel:=FunctionGetPanel(AOwner);
Panel.Parent:=AOwner;
Result:=Panel;
end;

В вызывающей ее программе:

Type

...

TFunctionGetPanel = function (AOwner: TWinControl): TPanel;

...

Var Panel: TPanel;

...

function SelfFunctionGetPanel(AOwner: TWinControl): TPanel;
begin
Result:=TPanel.Create(AOwner);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Panel:=GetPanel(SelfFunctionGetPanel,self);
end;


 
prockrut ©   (2003-12-01 05:14) [5]

то Passer-by
только что "поизвращался"
действительно работает

правда функция, генерящая panel, находится в программе а не в dll.
Так что твой пример - "полное извращение" ж)

но идея понравилась


 
Dimka Maslov ©   (2003-12-01 10:13) [6]

Класс TFont в dll и класс TFont в exe, да и вообще все классы, находящиеся в разных модулях (module) составляют различные иерархии классов и ни IS, ни AS, ни Assign работать не будут


 
REA ©   (2003-12-01 10:28) [7]

Угу. Прав
> Dimka Maslov ©
Используй Packages.


 
me   (2003-12-01 12:20) [8]

Packages использовать необязательно, но обязательно компилить и хост-аппликацию, и библиотеку с run-time packages.



Страницы: 1 вся ветка

Текущий архив: 2003.12.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
7-36879
and
2003-10-02 22:04
2003.12.12
Слежение за открывающимися и закрывающимися окнами


3-36559
IGORYOK
2003-11-20 12:49
2003.12.12
Чтобы работала на всех виндах


1-36729
webpauk
2003-12-02 11:38
2003.12.12
Файлы dcu->pas


1-36739
vlv
2003-11-29 20:52
2003.12.12
Поиск в файлах


1-36737
Dracula2000
2003-12-02 10:30
2003.12.12
Grid or DBGrid