Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2017, 09:40   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
Смущение Открытие и закрытие фреймов

здравствуйте, с наступившем Вас новым годом!
у меня имеются несколько фреймов, и в каждом фрейме я создал public процедуры, с именами: Start, Finish. Которые либо открывают, либо закрывают фрейм.
На форме, я решил написать простую функцию, которая бы, закрывала предыдущий фрейм, и открывала новый ...
__________
procedure OpenFrame(TF: TFrame);
begin
// af - активный фрейм
af.finish;
af := TF;
af.start;
end;
__________
Потом просто пишу так: OpenFrame(FrameLoGo1);
Но программа выдаёт мне ошибку:
" Undeclared identifier:'Finish'/'Start' "
Я так понимаю, что тут дело в том, что я где то не указал эти процедуры, из за чего компилятор не понимает что я от него хочу ...
Если это так, то КАК мне их объявить?
я не знаю ...
Janger вне форума Ответить с цитированием
Старый 10.01.2017, 10:38   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
у меня имеются несколько фреймов,
1. простой быстрый говно-код
Код:
if af is TFrame1 then (af as TFrame1).Finish
else if af is TFrame2 then (af as TFrame2).Finish
else ... ;
2. правильный, но не быстрый
а) сделать БАЗОВЫЙ фрейм
Код:
TFrameBase =class(TFrame)
public
  procedure Finish; virtual; abstract;
  procedure Start; virtual; abstract;
end;
б) ВСЕ прочие НАСЛЕДОВАТЬ от этого и
Код:
 af: TFrameBase
3. ДРУГОЙ правильный без базового класса.
Использовать интерфейсы
Код:
IFrameControl =interface
  procedure Start;
  procedure Finish;
end;
ВСЕ фреймы должны реализовывать этот интерфейс
Код:
Tframe1 =class(TFrame, IFrameControl)
...
end;
Код:
(af as IFrameControl).start;
(af as IFrameControl).Finish;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.01.2017 в 10:44.
evg_m вне форума Ответить с цитированием
Старый 11.01.2017, 05:52   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
1. простой быстрый говно-код
Код:
if af is TFrame1 then (af as TFrame1).Finish
else if af is TFrame2 then (af as TFrame2).Finish
else ... ;
2. правильный, но не быстрый
а) сделать БАЗОВЫЙ фрейм
Код:
TFrameBase =class(TFrame)
public
  procedure Finish; virtual; abstract;
  procedure Start; virtual; abstract;
end;
б) ВСЕ прочие НАСЛЕДОВАТЬ от этого и
Код:
 af: TFrameBase
3. ДРУГОЙ правильный без базового класса.
Использовать интерфейсы
Код:
IFrameControl =interface
  procedure Start;
  procedure Finish;
end;
ВСЕ фреймы должны реализовывать этот интерфейс
Код:
Tframe1 =class(TFrame, IFrameControl)
...
end;
Код:
(af as IFrameControl).start;
(af as IFrameControl).Finish;
решил использовать второй способ ...
класс создал в отдельном юните. При создании фрейма в uses указал юнит с нужным классом, и сделал что бы он наследовался не от class(TFrame), а от class(TMyFrame).
Но когда я решил кинуть фрейм на форму, он выдал мне ошибку о том что не может это сделать
Janger вне форума Ответить с цитированием
Старый 11.01.2017, 09:23   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

02.jpg


работаем в ОДНОМ проекте(Project1)
Цитата:
а) сделать БАЗОВЫЙ фрейм
1 + 2 картинка => unit2 TFrame2 =class(TFrame)
Цитата:
б) ВСЕ прочие НАСЛЕДОВАТЬ от этого и
1 + 3 картинка => unit3 TFrame3 =class(TFrame2)
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 12.01.2017, 21:51   #5
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
работаем в ОДНОМ проекте(Project1)

1 + 2 картинка => unit2 TFrame2 =class(TFrame)

1 + 3 картинка => unit3 TFrame3 =class(TFrame2)
Ага, я вроде бы понял.
Но у меня остался последний вопрос ....
У меня уже несколько фреймов, создано не как вы показали, а обычным способом: File > New > Frame
Подскажите, можно ли как то, "переделать" фреймы, что бы можно было их добавить на форму ...
А то у меня ничего не выходит
Janger вне форума Ответить с цитированием
Старый 12.01.2017, 22:01   #6
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию


Постоянно, при добавлении фреймов на форму, если я указал в тех фреймах что бы они наследовались от моего фрейма, возникает вот такая ошибка ...
ссылка, на картинку ...

Последний раз редактировалось Janger; 12.01.2017 в 22:03.
Janger вне форума Ответить с цитированием
Старый 13.01.2017, 18:44   #7
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Решил проблему, изменением строк,в файле с расширение (*.dfm).
Если есть более правильный способ, подскажите.
А за ответ, спасибо большое!
Очень помогли!
Janger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие и закрытие файла (С++) Артём Волжанкин Помощь студентам 4 23.07.2012 21:47
Открытие/закрытие CD по сети Der_G()RuNu(h Работа с сетью в Delphi 9 20.08.2011 12:11
Открытие/Закрытие СД-РОМа (Sandr) Общие вопросы C/C++ 1 16.02.2011 22:47
2 формы(открытие закрытие) начинающий1 Общие вопросы Delphi 15 15.07.2010 22:54
открытие-закрытие файла dante92 Помощь студентам 0 13.06.2010 13:17