Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 891

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!Как обратиться из активной формы к элементу н другой форме ???Да и где в делфи аналог Глобального Модуля 1с Куда жно засунуть процедуры и вызывать из разных форм ?Заранее Спасибо !

GP_ Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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_

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_

GP_ (статус: Посетитель), 11 сентября 2008, 15:57 [#2]:

да и раз уж на то пошло может кто книгу какую цифровую подкинет на тему Делфи для чайников?
Вадим К

Вадим К (статус: Академик), 11 сентября 2008, 16:02 [#3]:

Как называется юнит, в котором находиться форма SDIMAIN?
а по поводу книги... бумажная лучше. и гугль в помощь.
Галочка "подтверждения прочтения" - вселенское зло.
GP_

GP_ (статус: Посетитель), 11 сентября 2008, 16:05 [#4]:

Заработало , Добавил в Uses и написал строку вот так :
SDIMAIN.SDIAppForm.ADOConnection1.ConnectionString :=str ;
Вадим К

Вадим К (статус: Академик), 11 сентября 2008, 16:07 [#5]:

почитали бы сразу, что я написал, всё бы заработало
Галочка "подтверждения прочтения" - вселенское зло.
GP_

GP_ (статус: Посетитель), 11 сентября 2008, 16:07 [#6]:

у мну 2 бумажные одна Delphi & DB а др Delphi 6 обе бестолковые какие-то
Вадим К

Вадим К (статус: Академик), 11 сентября 2008, 16:09 [#7]:

может просто читать не можете. Нет, буквы то знаете, книгу просто читать не можете. Или они написаны русскими авторами, тогда да, скорее всего будут вода-водой+кучка ошибок
Галочка "подтверждения прочтения" - вселенское зло.
Вадим К

Вадим К (статус: Академик), 11 сентября 2008, 16:15 [#8]:

А что же не удоволетворило в моем ответе, что 4?
Галочка "подтверждения прочтения" - вселенское зло.
Feniks

Feniks (статус: Бакалавр), 11 сентября 2008, 16:17 [#9]:

Да, мне тоже хотелось бы знать про свой ответ ? :-)
Каков вопрос, таковы и ответы.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:46
Выполнено за 0.03 сек.