Главная страница
    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.005 c
2-1241431602
95
2009-05-04 14:06
2009.06.21
Содержимое буфера в поток


15-1239437418
stas
2009-04-11 12:10
2009.06.21
Плагин к IE


2-1241037428
бульдозер
2009-04-30 00:37
2009.06.21
как зная ID процесса получить хендл окна этого процесса


15-1239538451
Kerk
2009-04-12 16:14
2009.06.21
.Net Compact Framework


2-1240992632
Diha
2009-04-29 12:10
2009.06.21
Казахский язык





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