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

Вниз

Работа с dll-библиотеками   Найти похожие ветки 

 
Kuper7777 ©   (2009-12-16 21:57) [0]

Народ, подскажите пожалуйста!
Пишу dll-ку, в ней я создаю форму и кнопку на ней. Как мне (в этой же библиотеке) написать обработчик событий для кнопки (OnClick) и для формы (OnShow и OnCreate)?... не обращаясь к самой программе...


 
Медвежонок Пятачок ©   (2009-12-16 22:00) [1]

Как мне (в этой же библиотеке) написать обработчик событий для кнопки (OnClick)

дважды топнуть по кнопке в дизайнере и сделается пустой обработчик.
в этой же библиотеке


 
Kuper7777 ©   (2009-12-16 22:05) [2]

Забыл уточнить... Дело в том, что и форму и кнопку я создаю динамически.


 
Медвежонок Пятачок ©   (2009-12-16 22:10) [3]

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


 
Kuper7777 ©   (2009-12-16 22:19) [4]

Приведу код.

library DLL;

uses
 Windows, Messages, SysUtils, Variants,
 Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls, extctrls;
var
  Form1: TForm;
  Button1: TButton;

{$R *.res}

begin
  Form1:=TForm.Create(Application);
  Form1.Height:=400;Form1.Width:=600;
  Form1.Position:=poScreenCenter;
  Form1.Color:=clHighlight;
  Button1:=TButton.Create(Form1);
  Button1.Left:=10;Button1.Top:=10;
  Button1.Caption:="Новая кнопка";
  Button1.Parent:=Form1;
  Form1.ShowModal;
  Form1.Free;
end.

На экране появляется Форма с кнопкой. И надо им создать обработчики.


 
Медвежонок Пятачок ©   (2009-12-16 22:21) [5]

дважды топнуть по кнопке в дизайнере и сделается пустой обработчик.
в этой же библиотеке


 
Хитрий Лис   (2009-12-16 22:25) [6]

А теперь для особо понятливых... человек создаёт форму в dll :)


 
Медвежонок Пятачок ©   (2009-12-16 22:26) [7]

и чо?
для кнопки на форме в длл нельзя иметь онклик?


 
Хитрий Лис   (2009-12-16 22:28) [8]


> Медвежонок Пятачок ©   (16.12.09 22:26) [7]
> и чо?
> для кнопки на форме в длл нельзя иметь онклик?

Чокать маме своей будете :)
Можно, но это долгий и нудный путь для последующих разбирательств, почему не работает то почему это...


 
Kuper7777 ©   (2009-12-16 22:29) [9]

Ребят, я не создаю форму через File->New->Form. Все надо сделать программно....  или я чего-то не понимаю?


 
Медвежонок Пятачок ©   (2009-12-16 22:30) [10]

Про пути и нудности ничего не спрошено.

Спрошено буквально следущее:
Как мне (в этой же библиотеке) написать обработчик событий для кнопки (OnClick)


 
Медвежонок Пятачок ©   (2009-12-16 22:32) [11]

или я чего-то не понимаю?

ты не понимаешь что обработчики создаются во время проектирования.
то есть программирования.

они должны уже быть внутри pas на момент нажатия F9


 
Kuper7777 ©   (2009-12-16 22:39) [12]

Нету ни PAS-ов, ни F9 и никаких UNIT-ов. Есть только проект, библиотека и Ctrl+F9 (только компиляция).


 
Медвежонок Пятачок ©   (2009-12-16 22:41) [13]

если пасов нет, то обработчик в этой же библиотеке написать просто негде.


 
DVM ©   (2009-12-16 22:48) [14]

Button1.OnClick := Твоя процедура или функция подходящего типа;


 
Kuper7777 ©   (2009-12-16 22:50) [15]

Так бы сразу. То есть все равно надо UNIT создавать? А как из этой библиотеки вызвать форму (типа OnShow)? Совсем недавно занимаюсь DLL-ками...


 
Медвежонок Пятачок ©   (2009-12-16 22:50) [16]

Нету ни PAS-ов, ни F9 и никаких UNIT-ов. Есть только проект

а в связи с чем такая "экономность"?

чисто спортивно-акробатический интерес, или есть иной скрытый смысл в этом ?


 
Kuper7777 ©   (2009-12-16 22:51) [17]

Скорее спортивный. Только начал библиотеками заниматься.


 
DVM ©   (2009-12-16 22:52) [18]


> То есть все равно надо UNIT создавать?

если хочешь можешь и не создавать а писать все в dpr


 
Медвежонок Пятачок ©   (2009-12-16 22:52) [19]

То есть все равно надо UNIT создавать?

ну можешь прямо в дпр задекларировать класс единтсвенным методом и использовать его в качестве обработчика.


 
Anatoly Podgoretsky ©   (2009-12-16 22:55) [20]

> Kuper7777  (16.12.2009 22:29:09)  [9]

А почему ты не создаешь, ведь по примеру обычная форма для редактора, статическая. Религия?


 
Kuper7777 ©   (2009-12-16 22:55) [21]

Для DVM.

Button1.OnClick := Твоя процедура или функция подходящего типа;

Это я уже видел. Проблема в том, что когда пишу типа:

Button1.OnClick := Click;

а выше стоит процедура типа:

procedure Click(Sender: TObject);
begin
Close;
end;

но именно в этот момент компилятор ругается - Button1.OnClick :=
не принимает мою Click;


 
@!!ex ©   (2009-12-16 22:56) [22]

TForm1=class(TForm)
private
procedure FormClick(Sender: TObject);
end;

Procedure TForm1.FormClick(Sender: TObject);
begin
 //TODO
end;

begin
 Form1:=TForm1.Create(Application);
 Form1.OnClick:=FormClick;
end;



 
@!!ex ©   (2009-12-16 22:57) [23]

> [21] Kuper7777 ©   (16.12.09 22:55)

Потому что твой клик должен быть частью объекта. Это компилятор, кстати, вполне понятно в логе пишет.


 
Amoeba ©   (2009-12-16 23:00) [24]

Автру вопроса читать эту статью до полного просветления:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=342


 
Сергей М. ©   (2009-12-16 23:06) [25]


> Kuper7777
>Совсем недавно занимаюсь DLL-ками


Да по барабану давно или недавно, DLL-ками или EXE-льками.

Тот же самый вопрос мог бы иметь ту же актуальность и для EXE-лек.

Просто в экзельке ты шмякал формы и кнопки на нее прямо в дизайн-тайм и ни о чем не задумывался.

А теперь в длльке тебя вдруг торкнуло - а чегой-то вдруг обязательно шмякать ? А можно ли без шмяканья ?

Ну и, согласись, возникает резонный вопрос - почему тебя оно не торкнуло раньше, в экзельке ? Там ведь тоже можно шмякать, а можно не шмякать ..

Т.е. в этом плане экзелька от длльки ничем не отличается


 
Kuper7777 ©   (2009-12-16 23:25) [26]

library DLL;

uses
 Windows,
 Messages,
 SysUtils,
 Variants,
 Classes,
 Graphics,
 Controls,
 Forms,
 Dialogs,
 StdCtrls,
 extctrls;

type
TClick = procedure (Sender: TObject) of object;
var
 Form1: TForm;
 Button1:TButton;
 Click: TClick;
{$R *.res}

procedure Click(Sender: TObject);
begin
 MessageDlg("Работает",mtInformation,[mbOK],0);
end;

begin
 Form1:=TForm.Create(Application);
 Form1.Height:=400;Form1.Width:=600;
 Form1.Position:=poScreenCenter;
 Form1.Color:=clHighlight;
 Button1:=TButton.Create(Form1);
 Button1.Left:=10;Button1.Top:=10;
 Button1.Caption:="кнопка";
 Button1.OnClick:= ---------------- что здесь писать? Ничего не принимает.
 //  или где еще ошибка ?
 Button1.Parent:=Form1;
 Form1.ShowModal;
 Form1.Free;
end.


 
DVM ©   (2009-12-16 23:26) [27]


> что здесь писать? Ничего не принимает.

метод объекта там писать, ты же выше сам объявил это.


 
Kuper7777 ©   (2009-12-16 23:31) [28]

Если еще не всех достал...

Пишу

Button1.OnClick:=Click;

и выдает ошибку на строке

procedure Click(Sender: TObject);


 
Игорь Шевченко ©   (2009-12-16 23:32) [29]

давайте читать книги. можно вслух.


 
DVM ©   (2009-12-16 23:36) [30]


> Kuper7777 ©

ты создавай не экземпляр TForm, а экземпляр своего класса TMyForm = class(TForm) в котором определи метод Button1Click(Sender: TObject) и его уже присваивай как обработчик.


 
Дмитрий Белькевич   (2009-12-16 23:46) [31]

Что, не выходит каменный цветок? :)

Сделай свой класс, что бы Form1 был не TForm а, например, TForm1. В классе TForm1 описывай все события, что тебе нужны. Собственно, именно это за тебя среда делает - смотри код визуально созданный и сделай то же самое - в чём проблема?


 
Дмитрий Белькевич   (2009-12-16 23:52) [32]

Глобально, нужно курить книжки и разбираться:

что есть тип класса - TClick = procedure (Sender: TObject) of object;
что есть переменная (Instance) этого типа - Click: TClick;
и что есть обычная (такое слово обычно подразумевает, что есть необычные процедуры - методы) процедура - procedure Click(Sender: TObject);

Здесь Click и procedure Click - два разных Intanc"а. А procedure Click к TClick отношения не имеет.


 
Amoeba ©   (2009-12-16 23:58) [33]


> Kuper7777 ©   (16.12.09 23:31) [28]
>
> Если еще не всех достал...
>
> Пишу
>
> Button1.OnClick:=Click;
>
> и выдает ошибку на строке
>
> procedure Click(Sender: TObject);

Ты статью по ссылке в [24] прочел? Непохоже. Судя по тому, что сказка про белого бычка продолжается, "чукча не читатель, чукча писатель".


 
Медвежонок Пятачок ©   (2009-12-17 00:04) [34]

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


 
@!!ex ©   (2009-12-17 00:16) [35]

Удалено модератором


 
Amoeba ©   (2009-12-17 00:26) [36]


> @!!ex ©   (17.12.09 00:16) [35]

Поддерживаю! Наконец-то все точки над i поставлены.

Пора ветку закрывать.


 
Kuper7777 ©   (2009-12-17 00:32) [37]

Ребята, всем спасибо. Но я уже давно все сделал.


 
Amoeba ©   (2009-12-17 00:36) [38]


> Kuper7777 ©   (17.12.09 00:32) [37]
>
> Ребята, всем спасибо. Но я уже давно все сделал.

Вот давно и надо было об этом поведать. А то ведь на протяжении аж 8 постов шло метание бисера.



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

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

Наверх




Память: 0.56 MB
Время: 0.011 c
15-1261161523
Washington
2009-12-18 21:38
2010.02.28
Алгоритмы работы с видео


15-1261171198
TUser
2009-12-19 00:19
2010.02.28
Искривление времени?


15-1260923205
Kerk
2009-12-16 03:26
2010.02.28
Счетчик посещаемости


2-1261851917
Наталья
2009-12-26 21:25
2010.02.28
протокол UDP


15-1260960381
vajo
2009-12-16 13:46
2010.02.28
Как настроить отправку почту из EXCEL через Outlook