Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Вниз

Переключение между формами 


V_Nik   (2002-04-02 12:12) [0]

Написал процедуру, работа которой зависит от того, с какой формы к ней идет обращение.

procedure myproc (rabfrm:TForm);

begin
with rabfrm.Table1 do begin
…………
…………
end;

Обращаюсь к ней:

myproc(Form1);

Не работает.
Form1 не воспринимается.

Что не так?



gek   (2002-04-02 12:17) [1]

< procedure myproc (rabfrm:TForm);

begin
with rabfrm.Table1 do begin
…………
…………


Есть ли на других формах таблица?



V_Nik   (2002-04-02 12:49) [2]

<gek
Имена таблиц на всех формах разные



Anatoly Podgoretsky   (2002-04-02 12:57) [3]

А модуль про Form1 что нибудь знает?
Приведи uses



Владислав   (2002-04-02 13:04) [4]

Как не воспринимает? Говорит, что отказывается работать с Form1? Может причины какие-нибудь объясняет?



V_Nik   (2002-04-02 14:19) [5]

<Anatoly Podgoretsky
Модуль знает про все формы

<Владислав
[Error]: Undeclared identifier: "Table1
[Error]: Undeclared identifier: "First""
[Error]: Undeclared identifier: "FieldByName"

Если я вместо rabfrom ставлю Form1, то все ОК.



gek   (2002-04-02 14:32) [6]

Ну сделай

uses
Db, DBTables;

procedure myproc (Tbl:TRable);
.....................
если только с таблицей работаешь
и
myproc(Form1.Table_yaur_name);



yaJohn   (2002-04-02 14:34) [7]

>procedure myproc (rabfrm:TForm);
>begin
>with rabfrm.Table1 do begin

Мил человек, да с чего ему работать-то? Где у TForm есть свойство Tabel1???
А у Форм1 такое свойство как раз есть, поскольку на нее (Форм1) ее (Табел1) поместили.

ИМХО лучше procedure MyProc(Table: TTable);



Alx2   (2002-04-02 14:37) [8]

В класс TForm не водят поля или методы с именем Table1.
Чтобы заработало, надо исправить
procedure myproc (rabfrm:TForm);
на
procedure myproc (rabfrm:TForm1);
Или какого там типа Form1?




Anatoly Podgoretsky   (2002-04-02 15:06) [9]

V_Nik (02.04.02 14:19)
Вот теперь другое дело.

Form1 воспринимается
Только у rabfrm нет таких свойств, надо
procedure myproc (rabfrm:TForm1);

Вот у Form1 они есть
Но вероятнее всего у тебя неверная постановка задачи, наверно надо делать по другому.



Бурундук   (2002-04-02 15:27) [10]

а почему не сделать myproc методом TForm1?



V_Nik   (2002-04-02 17:36) [11]

<Anatoly Podgoretsky
Да, скорее всего, я что-то делаю не так.
Задача-то простая. У меня есть несколько разных форм с таблицами, одинаковыми по названию, но разными по содержанию. Хотелось бы иметь для них одну процедуру обработки (например, вывода каких-то одинаковых для всех таблиц (по названию полей) данных в Word). Как передать в процедуру название той формы, таблицу с которой ей следует обрабатывать? Или как по-другому решить эту задачу?



Anatoly Podgoretsky   (2002-04-02 17:42) [12]

Передавай таблицу, а не форму



olookin   (2002-04-02 17:43) [13]

А попробуйте так. Задайте для всех форм таги от 0 до номера последней формы. Надо понимать, процедура myproc вызывается при каком событии на форме-sender-е. Тогда введите глобальную переменную globalTag и приравняйте ее тагу формы, которая в данный момент вызывает myproc. Затем используйте:

for i:=0 to Application.ComponentCount-1 do
if (Application.Components[i] is TForm) and
(Application.Components[i] as TForm).Tag=globalTag then
with (Application as TForm).Table1 do begin
...(то, что является аналогом myproc)
end;



yaJohn   (2002-04-02 17:44) [14]

>Хотелось бы иметь для них одну процедуру обработки
Лингвистический анализ. Для форм или для таблиц???
ИМХО - правильное решение - передавать как параметры сами таблицы, которые надо обрабатывать. Если надо именно формы - только через РТТИ, а это заморочка еще та, и вообще не красиво.
procedure MyProc(Table: TTable);




yaJohn   (2002-04-02 17:48) [15]

2 olookin
>(Application as TForm).Table1
А если подумать? Или попробовать...



olookin   (2002-04-02 17:59) [16]

Да, конечно, здесь также ввести проверку на наличие объекта по аналогу с Application, т.е.

for i:=0 to
(Application.Components[i] as TForm).ComponentCount-1 do
if (Application.Components[i] as TForm).Components[i] is TTable

и т.д.



Бурундук   (2002-04-02 18:07) [17]

TForm1.Table1 и TForm2.Table1 - вещи совершенно разные,
и обратиться к ним в общем случае можно разве что через имя
(FindComponent)



olookin   (2002-04-02 18:10) [18]

Бурундук, неправда. Не надо искать имя, достаточно найти этот компонент на исходной форме так, как я и делаю (и как привел на примере).



Владислав   (2002-04-02 18:23) [19]

Один из вариантов.

Создай форму (скажем TfrmCommon). Помести на нее TTable (например, tblCommon: TTable). Сделай процедуру обработки этих таблиц методом этой вновь созданной формы. Дальше, используя визуальное наследование форм, создай унаследованные (от TfrmCommon) формы (File|New...; Вкладка AppName; frmCommon; OK. Где AppName - название твоего проекта). Измени их, как тебе нужно. В своем методе обработки можешь обращаться к к компоненту-таблице - tblCommon.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.75 MB
Время: 0.038 c
4-46547           mishany               2002-02-13 04:13  2002.04.15  
завершение процессов


1-46433           DenKop                2002-04-01 13:07  2002.04.15  
Шифрование с помощью RSA RC5.


1-46406           UnDISCOvery           2002-04-01 15:44  2002.04.15  
Из Дельфы - все ОК, а из Виндов - ошибка ! Из-за чего ???


1-46455           Glonia Zbanov         2002-04-03 13:37  2002.04.15  
Размер форм


3-46275           Зинец Виктор          2002-03-13 14:08  2002.04.15  
DCOM и базы данных - как подружить?