Форум: "Прочее";
Текущий архив: 2010.02.28;
Скачать: [xml.tar.bz2];
ВнизРабота с 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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.006 c