Форум: "Основная";
Текущий архив: 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.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.04.15;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c