![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Переключение между формами [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
…………
…………
Есть ли на других формах таблица?