|
Вопрос # 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]:
Да, мне тоже хотелось бы знать про свой ответ ? 
Каков вопрос, таковы и ответы.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|