Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 15:20   #1
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию Компоненты в Dll

Добрый день (или) форумчане! Вот такой вопрос: Пишу сейчас библиотеку для другого языка программирования, в которой будут содержаться многие визуальные компоненты Delphi, как написать процедуру (или функцию) для создания кнопки?

Буду очень признателен.

P.S. Библиотеки пишу первый раз, с основной архитектурой знаком. Какой язык лучше не спрашивайте. Скажу одно визуальную оболочку он не имеет
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 15:57   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

ActiveX .
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 16:11   #3
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
ActiveX .
В смысле?

library BlitzGui;

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

{$R *.res}

function ShowMes(caption:PChar):integer;stdc all;export
Begin
result:=1;
If result=1 then
Begin
ShowMessage(caption);
end;
end;

function CreateForm(caption:PChar; name:PChar; width:integer; height:integer ;visible:integer ) : Integer; stdcall;
var
Form : TForm;
begin
Form := TForm.Create(Application);
Form.Caption:=caption;
Form.Name:=name;
Form.Width:= width;
Form.Height:=height;
If visible=1 then
Begin
Form.Visible:=True
end
else Begin
Form.Visible:=False;
end;
Result := Form.ShowModal;
Form.Free;
end;

exports
ShowMes,CreateForm;

begin
end.

Вот собственно зачаток кода. Как через функцию создать?
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 16:37   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> для создания кнопки

кнопка сама по себе не живет, напишите толком, где вы хотите, чтобы она появилась.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 21:23   #5
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
> для создания кнопки

кнопка сама по себе не живет, напишите толком, где вы хотите, чтобы она появилась.
Ага. Хорошо...

Есть язык программирования, называемый BlitzBasic (Blitz3D). Визуальное программирование в нём отсутствует. Только скриптинг. Мне понадобились визуальные компоненты, для работы, такие как: форма, кнопка, надписи и т. п. . Существуют сторонние библиотеки для этого скриптового языка, но они меня не устраивают. Вот я решил сам для себя написать библиотеку, которая бы содержал все те визуальные компоненты, которые мне нужны.
А, собственно, размещаться все виз. компоненты должны на форме. Вот мне нужен, хотя бы один, пример создания компонента, чтобы дальше разобраться.
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 22:51   #6
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию

Function CreateButton:integer;stdcall;export ;
var
but:TButton;
begin
but:=TButton.Create(application);
but.Parent:=Form;
result:=but.ModalResult;

end;

Вот - написал функцию, но что-то не работает.
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 23:02   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Ничего не понял, ну ладно, не важно )

Ну вот форму вы создали, так? Через CreateForm(). Там надо переделать из модальной в обычную и хранить указатель на неё, ну это мелочи.
Теперь на неё можно вешать любые контролы. Ту же кнопку:

Код:
  Button := TButton.Create(Form);
  Button.Caption := 'OK';
  Button.Left := 100;
  Button.Top := 100;
  Button.Width := 40;
  //
  Button.Parent := Form;
Можно извращнуться, и добавить в ДЛЛ процедуру типа CreateControl(CType: Integer; Left, Top: Integer); и внутри там case по CType, создавать кнопки, лейбыл и т.д.

Дальше, надо подумать, как сделать обратные вызовы (callback), чтобы при нажатии на кнопку, например, вызывалась какая-то процедура на BlitzBasic. Это уже от возможностей самого BlitzBasic зависит.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 22.02.2011, 23:09   #8
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
Ничего не понял, ну ладно, не важно )

Ну вот форму вы создали, так? Через CreateForm(). Там надо переделать из модальной в обычную и хранить указатель на неё, ну это мелочи.
Теперь на неё можно вешать любые контролы. Ту же кнопку:

Код:
  Button := TButton.Create(Form);
  Button.Caption := 'OK';
  Button.Left := 100;
  Button.Top := 100;
  Button.Width := 40;
  //
  Button.Parent := Form;
Можно извращнуться, и добавить в ДЛЛ процедуру типа CreateControl(CType: Integer; Left, Top: Integer); и внутри там case по CType, создавать кнопки, лейбыл и т.д.

Дальше, надо подумать, как сделать обратные вызовы (callback), чтобы при нажатии на кнопку, например, вызывалась какая-то процедура на BlitzBasic. Это уже от возможностей самого BlitzBasic зависит.
Не знаю, когда в процедуру создания формы прописываю ваш код, то в BlitzBasic' е, отображает кнопку на форме, когда отдельно процедуру делаю, то нет. Вот код:

library BlitzGui;

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

var
Form : TForm;
Button:TButton;

{$R *.res}

function ShowMes(caption:PChar):integer;stdc all;export
Begin
result:=1;
If result=1 then
Begin
ShowMessage(caption);
end;
end;

Procedure CreateButton();stdcall;export;
begin
Button := TButton.Create(Form);
Button.Caption := 'OK';
Button.Left := 100;
Button.Top := 100;
Button.Width := 40;
//
Button.Parent := Form;
{result:=1; }
end;

function CreateForm(caption:PChar; name:PChar; width:integer; height:integer ) : Integer; stdcall;

begin
Form := TForm.Create(Application);
Form.Caption:=caption;
Form.Name:=name;
Form.Width:= width;
Form.Height:=height;
Result := Form.ShowModal;
Form.Free;
end;



exports
ShowMes,CreateForm,CreateButton;

begin
end.
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 23:19   #9
Ganociy
Пользователь
 
Регистрация: 22.02.2011
Сообщений: 13
По умолчанию

Я нашёл предполагаемые неисправности.
Вот:
Button := TButton.Create(Form);
Button.Parent := [COLOR="rgb(139, 0, 0)"]Form[/COLOR];

Выделенно красным.
Ganociy вне форума Ответить с цитированием
Старый 22.02.2011, 23:26   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

А как может работать форма после вызова Form.Free?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пытаюсь понять код user32.dll и gdi32.dll Beermonza Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 43 13.07.2010 15:09
Windows I/o без Kernel32.dll и Advapi32.dll coinkrsk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 31 27.06.2010 08:52
Компоненты в DLL Bulbo Общие вопросы Delphi 4 27.03.2010 16:15
[DLL] Загрузка и выгрузка dll в/из чужого процесса Человек_Борща Win Api 4 28.02.2010 17:47
Ошибка при выхове функций Bass.dll из другой DLL SalasAndriy Общие вопросы Delphi 7 21.10.2009 23:36