Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.04.15;
Скачать: CL | DM;

Вниз

Переключение между формами   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.012 c
3-46231
Giga-Byte
2002-03-23 13:24
2002.04.15
Как можно отсортировать записи в Таблице


1-46334
Mikel Fryg
2002-04-02 22:25
2002.04.15
Как сделать форму активной?


7-46528
SelfDestructor
2002-01-20 15:39
2002.04.15
Мелкий шрифт, крупный шрифт


1-46410
Bilya
2002-04-02 13:41
2002.04.15
Список импортируемых функций!!!!


3-46284
VAleksey
2002-03-26 09:31
2002.04.15
Таблица FoxPro