Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.06.21;
Скачать: [xml.tar.bz2];

Вниз

Объявление процедуры!   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
15-1239688470
JohnKorsh
2009-04-14 09:54
2009.06.21
Eternet и TCP/IP адрес.


15-1240086603
Юрий
2009-04-19 00:30
2009.06.21
С днем рождения ! 19 апреля 2009 воскресенье


2-1240937555
Андрей (начинающий)
2009-04-28 20:52
2009.06.21
как заставить мигать иконку


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


6-1203935494
manarov
2008-02-25 13:31
2009.06.21
Navigate неверно работает?





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