Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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.54 MB
Время: 0.005 c
15-1261151151
DDD329
2009-12-18 18:45
2010.02.28
Платформа


1-1237789977
Riply
2009-03-23 09:32
2010.02.28
Получение EnvironmentStrings среды.


2-1260884519
Агафон
2009-12-15 16:41
2010.02.28
Как вставить картинку????????


15-1260999021
Юрий
2009-12-17 00:30
2010.02.28
С днем рождения ! 17 декабря 2009 четверг


15-1250439668
TIF
2009-08-16 20:21
2010.02.28
Обсуждение Delphi 2010 | RAD Studio 2010 (Weaver)





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