Текущий архив: 2009.06.21;
Скачать: CL | DM;
Вниз
Объявление процедуры! Найти похожие ветки
← →
bobby (2009-04-29 14:30) [0]Вобщем задача такая: Необходимо на главной форме написать процедуру так, чтоб её можно было вызывать из других форм. Процедуру взял элементарную:
procedure ьып(x:string);
begin
ShowMessage(X);
end;
Вопрос: как объявить эту функцию чтоб её было видно из другой формы??
пробывал в разделе Type:procedure msg(x: string);
Выдаёт ошибку что нехватает ещё чего-то:[Error] Unit1.pas(13): Unsatisfied forward or external declaration: "TForm1.SetValue"
В справочнике делфи я не нашел норм ответа :( И в литературе описаны только простейшие примеры процедур и функций для вызова из формы где сама процедура и размещена:( Помогите пожалуста!
← →
bobby (2009-04-29 14:33) [1]Осправлю описание ошибки:
[Error] Unit1.pas(13): Unsatisfied forward or external declaration: "TForm1.msg"
← →
clickmaker © (2009-04-29 14:37) [2]uses
если это не метод формы, то лучше вынести в отдельный юнит (как и другие совместно используемые процедуры), дабы не засорять код
← →
bobby © (2009-04-29 14:46) [3]Дело в том что из этой процедуры будит происходить обращение к ADOQuery для редактирования запроса и его активации. Из отдельных модулей насколько я знаю не получиться обращаться к компонентам формы:(
Вобщем будит вот так примерно
Procedure GetSector (H_id:integer);
begin
form1.QSector.Active:=False;
form1.QSector.SQL.Strings[2]:="......................"
form1.QSector.Active:=True;
Sector:=form1.QSector.FieldValues["SectorID"];//Sector - это переменная с раздела паблик. Из неё потом все берут результат запроса!
end;
Ну это так чтобы поняли почему именно процедура будит расположена на форме
← →
Anatoly Podgoretsky © (2009-04-29 14:49) [4]> bobby (29.04.2009 14:33:01) [1]
Похоже ты создал метод, вместо процедуры.
← →
clickmaker © (2009-04-29 14:50) [5]перенеси процедуру вместе с adoquery в DataModule
заодно и места на форме больше будет )
вообще, хорошая практика - выносить работу с данными в отдельные модули или классы. Чтобы не смешивать юзер интерфасе и бизнес-логику
← →
bobby © (2009-04-29 14:53) [6]Он итак там. Я написал за форму чтоб меньше описывать тут!!!
← →
Запомни Сынок (2009-04-29 14:55) [7]Дело в том что из этой процедуры будит происходить обращение к ADOQuery для редактирования запроса и его активации. Из отдельных модулей насколько я знаю не получиться обращаться к компонентам формы:(
Вобщем будит вот так примерно
Procedure GetSector (H_id:integer);
begin
form1.QSector.Active:=False;
form1.QSector.SQL.Strings[2]:="......................"
form1.QSector.Active:=True;
Sector:=form1.QSector.FieldValues["SectorID"];//Sector - это переменная с раздела паблик. Из неё потом все берут рез
Никогда больше так не делай.
← →
Ega23 © (2009-04-29 14:56) [8]
> Он итак там. Я написал за форму чтоб меньше описывать тут!
TMyDataModule = class (TDataModule)
.....
public
....
procedure Msg(....);
end;
......
procedure TMyDataModule.Msg(....);
begin
......
end;
Вызов - DataModule.Msg(...)
← →
12 © (2009-04-29 14:58) [9]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses unit2; //!!!!!!!!
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not(msg("Ok")) then showmessage("Error");
end;
end.
------------------------------------
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
function msg(aStr:string):boolean;
implementation
function msg(aStr:string):boolean;
begin
showmessage(astr);
result:=GetLastError<>0;
end;
{$R *.dfm}
end.
← →
bobby © (2009-04-29 14:58) [10]Запомни Сынок Еслои ты имеешь в виду использование функции с фозвратом значения вместо процедуры - то не катит. В программе нужно будит использовать это значение и без запросов в базу. Всё равно в глобальную переменную заносить!
← →
bobby © (2009-04-29 15:07) [11]Ega23 - низкий поклон. Большое спасибо!
← →
Запомни Сынок (2009-04-29 15:12) [12]Нет, я имею ввиду вот это
Procedure GetSector (H_id:integer);
begin
form1.QSector.Active:=False;
← →
bobby © (2009-04-29 15:14) [13]12 - и тебе спасибище!
← →
Ega23 © (2009-04-29 15:14) [14]
> Нет, я имею ввиду вот это
>
> Procedure GetSector (H_id:integer);
> begin
> form1.QSector.Active:=False;
>
Да весь код на помойку надо выкинуть
← →
bobby © (2009-04-29 15:15) [15]Запомни Сынок - по-друому не умею!
← →
Запомни Сынок (2009-04-29 15:16) [16]Procedure GetSector (AQuery : TQuery; H_id:integer);
begin
AQuery.Active:=False;
← →
Anatoly Podgoretsky © (2009-04-29 16:09) [17]Запомните сыновья - так писать не надо.
Страницы: 1 вся ветка
Текущий архив: 2009.06.21;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.006 c