Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Переключение между формами [D5, Win95/98]


V_Nik ©   (2002-04-02 12:12:00) 

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

procedure myproc (rabfrm:TForm);

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

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

myproc(Form1);

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

Что не так?


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

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

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


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

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


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

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


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

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

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

и т.д.


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

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


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

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



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

А попробуйте так. Задайте для всех форм таги от 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;


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

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


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

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


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

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


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

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

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

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


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

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



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

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

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

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


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

Ну сделай

uses
Db, DBTables;

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


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

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

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

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


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

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


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

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


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

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


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

< procedure myproc (rabfrm:TForm);

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


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


Наверх

Титульная страница Поиск, карта сайта Написать письмо