Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.014 c
2-1241090941
madmech
2009-04-30 15:29
2009.06.21
Проблема с отрисовкой заголовка кросс-отчета


15-1236615034
Кто б сомневался
2009-03-09 19:10
2009.06.21
Музыка - жанры и стили


15-1239655688
Petr V. Abramov
2009-04-14 00:48
2009.06.21
TUser - с днюхой


15-1240040122
@!!ex
2009-04-18 11:35
2009.06.21
Ищу материнку с Intel®AMT


15-1239988307
_VirEx_
2009-04-17 21:11
2009.06.21
Беспроводная зарядка