Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 10.01.2017, 10:40   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Адрес: Москва
Сообщений: 249
Репутация: -1

icq: 445997544
Смущение Открытие и закрытие фреймов

здравствуйте, с наступившем Вас новым годом!
у меня имеются несколько фреймов, и в каждом фрейме я создал 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, 11:38   #2
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,310
Репутация: 1909
По умолчанию

Цитата:
у меня имеются несколько фреймов,
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 в 11:44.
evg_m вне форума   Ответить с цитированием
Старый 11.01.2017, 06:52   #3
Janger
Форумчанин
 
Регистрация: 28.09.2011
Адрес: Москва
Сообщений: 249
Репутация: -1

icq: 445997544
По умолчанию

Цитата:
Сообщение от 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, 10:23   #4
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,310
Репутация: 1909
По умолчанию

02.jpg


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

icq: 445997544
По умолчанию

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

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

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

icq: 445997544
По умолчанию


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

Последний раз редактировалось Janger; 12.01.2017 в 23:03.
Janger вне форума   Ответить с цитированием
Старый 13.01.2017, 19:44   #7
Janger
Форумчанин
 
Регистрация: 28.09.2011
Адрес: Москва
Сообщений: 249
Репутация: -1

icq: 445997544
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Открытие и закрытие файла (С++) Артём Волжанкин Помощь студентам 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 23:47
2 формы(открытие закрытие) начинающий1 Общие вопросы Delphi 15 15.07.2010 22:54
открытие-закрытие файла dante92 Помощь студентам 0 13.06.2010 13:17




01:12.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru