| 
| 
 | Вопрос # 1 891/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Как обратиться из активной формы к элементу н другой форме ???Да и где в делфи аналог Глобального Модуля 1с Куда жно засунуть процедуры и вызывать из разных форм ?Заранее Спасибо ! 
|  |   Вопрос задал: GP_ (статус: Посетитель)Вопрос отправлен: 11 сентября 2008, 13:25
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: Feniks Здравствуйте, GP_!Что бы обратится из одной формы Form1 к объектам принадлежащим классу другой формы Form2, тогда так и пишите в модуле вашей формы Form1.<имя элемента/объекта>, но для этого Form2 должна быть создана во время работы приложения, иначе получите ошибку.
 Если вы хотите расположить свою функцию/процедуру в одном модуле, например utils.pas, и обращатся к ней из других модулей/форм, то тогда создаете этот модуль, перед блоком implementation объявляете заголовок своей функции, а после словоа implementation, т.е. в самом блоке, уже делаете реализацию этой функции. Далее, в том модуле, где вам надо вызвать эту функцию, в блоке uses подключаете, т.е. указываете имя своего модуля utils и спокойно пользуетесь функцией там, где вам надо.
 Например, я для своих "глобальных" функций и процедур делал отдельный модуль, не форму. Там делал реализацию и подключал его там где мне нужно было.
 
 P.S. Желаю удачи.
 
|  | Ответ отправил: Feniks (статус: Бакалавр)Время отправки: 11 сентября 2008, 13:46
 Оценка за ответ: 2
 |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, GP_!
 Цитата: Как обратиться из активной формы к элементу н другой форме ??? Очень просто. Надо просто указать вначале имя формы, а потом через точку имя нужного компонента. Например так
 Form3.edit.text.
 После этого можно запустить на компиляцию и делфи скажет, "ваш юнит использует другой, добавить?" Надо соглашаться. А можно ручками добавить в список uses имя модуля, в котором обявлена используемая форма.
 Следует заметить, что строка uses может быть в двух местах: в секции interface (там она обычно есть) и в секции implementation. Особой разницы для начинающих нет, разве что кроме ситуации с циклическими ссылками - это когда две формы ссылаются друг на дружку. Но это ошибка дизайна и надо избегать таких ситуаций.
 
 Цитата: Да и где в делфи аналог Глобального Модуля 1с Его в делфи нет, так как делфи более гибкая. Просто добавляете новый юнит(можно добавить столько, сколько нужно) File->New -> New Unit.
 В новом юните надо в секции implementation написать все нужные функции, а в секцию interface вынести заголовки тех, которые понадобляться в других юнитах. То есть, юнит может иметь "приватные" функции, которые будут недоступны другим юнитам. Глобальные переменные, которые должны быть видимы за пределами юнита тоже надо обявлять в секции interface.
 Теперь, если в каком-то другом юните надо функции, которые обявили в первом юните, просто в список uses добавляете имя юнита.
 Рекомендую открыть любой стандартный юнит делфи и посмотреть как там это сделано. Самый простой способ их открывать - это перейти к строке, где написано uses и зажав Ctrl кликнуть по имени юнита в списке. (это сработает, если конечно у вас не 3 делфи:) ).
 
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 11 сентября 2008, 13:48
 Оценка за ответ: 4
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 11 сентября 2008, 16:17; участников в обсуждении: 3. 
|   | GP_ (статус: Посетитель), 11 сентября 2008, 15:55 [#1]:У меня не получается =( unit users;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Registry? ;
 
 type
 TForm1 = class(TForm)
 but_OK: TButton;
 BUT_cancel: TButton;
 Label1: TLabel;
 Edit1: TEdit;
 Label2: TLabel;
 Edit2: TEdit;
 procedure FormCreate(Sender: TObject);
 
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 var
 Form1: TForm1;
 
 
 implementation
 
 {$R *.dfm}
 var RegFile: TRegIniFile;
 str: string;
 const
 //Подсекция
 SubKey: string = 'Software\GPFRONT';
 // Элемент для хранения целочисленных данных
 IntKey: string = 'IntKey';
 // Элемент для хранения строчных данных
 StrKey: string = 'Settings';
 
 // Тупь к SQL базе
 DataSource: string = 'DataSourceName';
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 { пытаемся получить данные из реестра}
 // Создать экземпляр класса
 RegFile := TRegIniFile.Create(SubKey);
 // Считать Путь к базе
 STR:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User' +
 'ID=Admin;Initial Catalog=FrontGP;Data Source='+
 RegFile.ReadString(StrKey, DataSource, '') ;
 SDIMAIN.ADOConnection1.ConnetcionString :=str ;
 
 end;
 
 end.
 Элемент ADOconnect на форме иминуемой SDIMAIN
 |  
|   | GP_ (статус: Посетитель), 11 сентября 2008, 15:57 [#2]:да и раз уж на то пошло может кто книгу какую цифровую подкинет на тему Делфи для чайников? |  
|   | Вадим К (статус: Академик), 11 сентября 2008, 16:02 [#3]:Как называется юнит, в котором находиться форма SDIMAIN? а по поводу книги... бумажная лучше. и гугль в помощь.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | GP_ (статус: Посетитель), 11 сентября 2008, 16:05 [#4]:Заработало , Добавил в Uses и написал строку вот так : SDIMAIN.SDIAppForm.ADOConnection1.ConnectionString :=str ;
 |  
|   | Вадим К (статус: Академик), 11 сентября 2008, 16:07 [#5]:почитали бы сразу, что я написал, всё бы заработало Галочка "подтверждения прочтения" - вселенское зло. |  
|   | GP_ (статус: Посетитель), 11 сентября 2008, 16:07 [#6]:у мну 2 бумажные одна Delphi & DB а др Delphi 6 обе бестолковые какие-то |  
|   | Вадим К (статус: Академик), 11 сентября 2008, 16:09 [#7]:может просто читать не можете. Нет, буквы то знаете, книгу просто читать не можете. Или они написаны русскими авторами, тогда да, скорее всего будут вода-водой+кучка ошибок Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Вадим К (статус: Академик), 11 сентября 2008, 16:15 [#8]:А что же не удоволетворило в моем ответе, что 4? Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Feniks (статус: Бакалавр), 11 сентября 2008, 16:17 [#9]:Да, мне тоже хотелось бы знать про свой ответ ?  Каков вопрос, таковы и ответы.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |