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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2011, 11:41   #11
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Цитата:
а может не надо тысячу раз окно создавать?
создайте один раз, потом просто показывайте/скрывайте.
Окно MDIChild и НЕ модальное - метод caHide к нему неприменим!
delphicoding вне форума Ответить с цитированием
Старый 05.12.2011, 11:50   #12
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
+ запрет на открытие двух одинаковых окон каталогов;
[желаем открыть каталог некий каталог указанный в переменной s.

Код:
TMDICatalog =claas(TMDICHild)
private
  procedure SetRootcatalog(const value: string);
  function GetRootCatalog: string;
public
  property rootcatalog: string read GetRootcatalog write SetRootCatalog;
end;
Код:
var
  f: TMDICatalog;
begin
  f:=nil;
  for j:=0 to MDIChildcount-1 do begin
    if (mdichildren[j] as TMDICatalog).rootcatalog=s then begin
      f:=(mdichildren[j] as TMDICatalog);
      bgreak;
    end;
  end;
  if f=nil then begin
    f:=TMDICatalog.Create(...);
    f.rootcatalog:=s;
  end;
  f.bridgtofront;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 05.12.2011 в 12:01.
evg_m вне форума Ответить с цитированием
Старый 05.12.2011, 23:21   #13
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Спасибо за очередной хорошо написанный пример!
Но, возможно это напряжение из-за уродских выборов, но я что-то вообще не могу въехать в Ваш сугубо профессиональный код...
Неужели простыми конструкциями и простейшими командами, вроде тех, что описаны мной на пред странице, без property итп усложнений, нельзя решить проблему темы???
delphicoding вне форума Ответить с цитированием
Старый 06.12.2011, 10:42   #14
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Неужели простыми конструкциями и простейшими командами, вроде тех, что описаны мной на пред странице, без property итп усложнений, нельзя решить проблему темы???
Можно конечно же, но в этом случае простой и понятный код (две строки rootcatalog = s rootcatalog := s ) превратиться в более длинный и менее понятный (по прошествии времени) код.
Код:
as TMDIcatalog).EditCatalog.text = s // rootcatalog = s

f.editCatalog.text:=s; //rootcataog := s
....

f.LoadDataCatalog(s); //rootcataog := s
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.12.2011 в 10:44.
evg_m вне форума Ответить с цитированием
Старый 06.12.2011, 14:46   #15
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Это опять какой-то изврат.

Можно как-то решить описанную проблему при помощи КОМАНД РАБОТЫ С ОКНАМИ-ФОРМАМИ, без допилов и изобретений велосипедов?!
delphicoding вне форума Ответить с цитированием
Старый 06.12.2011, 15:10   #16
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Можно как-то решить описанную проблему при помощи КОМАНД РАБОТЫ С ОКНАМИ-ФОРМАМИ, без допилов и изобретений велосипедов?!
Без знания описания TMDICatalog (точнее вашей формы наследника TMDIchildren) никак.
А ее описание (создание) это УЖЕ допил.
можно использовать свои свойства, методы и прятать внутренние связи компонентов
можно обращаться напрямую к компонентам и следить за связями извне (из главной формы и потом долго вылавливать где забыл обновить связки).
Но код писать придется.

Цитата:
+ формы всех каталогов базируются на унаследованной форме базового каталога;
Код:
TMDICatalog=class(TMDIChildren)
Цитата:
+ открытие множества каталогов из главного окна MDIForm;
Код:
f:=TMDICatalog.Create(...);
f.rootcatalog:=s;
Цитата:
+ запрет на открытие двух одинаковых окон каталогов;
Код:
if (MDIchilren[j] as TMDICatalog).rootcatalog=s then
можно не использовать выделенное(специальное) свойство, но узнавать (и задавать) с каким каким каталогом работает(будет работать) форма все равно надо.
Цитата:
+ возможность работать с несколькими разными каталогами и возможность закрывать только одно из открытых окон каталогов.
заложено в TMDIChildren
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.12.2011 в 15:26.
evg_m вне форума Ответить с цитированием
Старый 06.12.2011, 16:07   #17
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Честно говоря я просто в шоке, что подобной (наиболее очевидной и удобной) схемы работы с окнами в БД стандартно нет и даже не предусмотрено стандартными средствами разработки Delphi... ужас.

Мне эти извраты не нравятся. Мне не нравится и я считаю неправильным писать добавочный код и возведение добавочных конструкций для решения тривиально-очевидных задач. Это приводит к захломлению и перегруженности кода. Пожалуйста, давайте подумаем - быть может можно решить вопрос темы более "логически очевидными конструкциями"...

Например: 1) можно ли как-то очищать переменную из начальных примеров fOknoCatalog1,fOknoCatalog2,fOknoCa talog3 при закрытии самого окна через код OnClose (в базовом классе fBaseCatalog или в дочернем fOknoCatalog2)?
2) может вместо закрытия скрыть MDIChild не модальное окно (caHide не пашет)? а затем вместо пересоздания просто Show. Как-то так.
3) возможно можно как-то улучшить сроку проверки "if not Assigned(fOkno) then begin" чтобы проверка проходила правильно, давала точный ответ - есть окно или нет?
4) может можно как-то проверять отображение окна по его заголовку или названию оригинального класса (без дурацкого поиска по списку MDI окошек с тупым перебором)?
delphicoding вне форума Ответить с цитированием
Старый 06.12.2011, 16:27   #18
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Решено - мой первый код вполне правильный и хорошо работает, не хватало только полного очищения/уничтожения переменной fOkno, для этого потребовалось всего-лишь дописать в OnClose строку fOkno:=nil; и всё, никаких извратов и ненужных конструкций.
delphicoding вне форума Ответить с цитированием
Старый 06.12.2011, 16:44   #19
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Если вы по этот пост и код
Цитата:
Ещё раз - в главной форме MDIForm есть кнопка с кодом:
fOkno := TfOkno.Create(self);
Цитата:
Можно ли как-то очищать переменную из начальных примеров fOknoCatalog1,fOknoCatalog2,fOknoCa talog3
Кажется понял!
У вас для КАЖДОГО конкретного каталога есть есть СВОЯ ОТДЕЛЬНАЯ форма наследник какого-то вашего базового класса и своя переменная для этого класса.
Судя по тому что нигде не упомянуто о том как настроить форму на работу с конкретным каталогом.
Если это так, то в шоке теперь я.

в моих примерах
1.только один класс TMDICatalog наследник TMDIChildren.
2.ни одной глобальной переменной
Цитата:
fOknoCatalog1,fOknoCatalog2,fOknoCa talog3.
3.приведен ВЕСЬ код по созданию и проверке дубликатов.
сначала проверяем и если не нашли то создаем новое и инициализируем.
4.единственое о чем не упомянул и не написал корректное удаление реализуется в Onclose (Action:=caFree).

P.S. кстати мой пример легко модифицируется под вашу схему.и без увеличения кода, который вы так не любите, но готовы копировать формы (то же код но который пишет Delphi) Но это после того как убедимся в том что мои догадки веры. А что собственно вы изменяете в формах чтобы она(форма) работала с заданным каталогом.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 06.12.2011 в 16:49.
evg_m вне форума Ответить с цитированием
Старый 06.12.2011, 17:19   #20
delphicoding
Заблокирован
 
Регистрация: 04.07.2011
Сообщений: 261
По умолчанию

Есть базовая форма BaseCatalogForm - там все основные и идентичные функции всех каталогов, например настройки окна, таблиц, кнопок отмены и сохранения, итп, часть универсальных настроек Show, открытие Dataset, единые настройки используемых в форме таблиц, итд, в общем максимум унификации.
Далее на базе родительской сделано положим 10 разных каталогов с разными данными из разных Dataset и с частично различающимся поведением и функционалом.
Задача описанная в теме - дать возможность юзеру открывать каждый из каталогов так, чтобы каждый каталог отображался в единственном числе.
Всё довольно просто и имхо в 2011году должно работать стандартными средствами Delphi без замороченных "допилов".
delphicoding вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в потоках (Access violation at address) designer999 Общие вопросы Delphi 9 25.08.2011 16:04
Ошибка Access violation... ара Общие вопросы Delphi 2 15.05.2011 15:57
Ошибка access violation at adress Godod Помощь студентам 2 02.02.2011 11:11
ошибка access violation at address ... Yuran БД в Delphi 5 05.01.2011 16:04
Ошибка Access Violation AHTuKiLLeR Общие вопросы Delphi 8 02.06.2009 10:48