RxMDI

Модераторы: alexs, Модераторы

Re: RxMDI

Сообщение Lucifer » 11.07.2019 15:06:48

Для транковой версии лазаря, как я понял? В релизе 2.0.2 не собирается. Пришлось комментировать непонятные компилятору куски. FPC 3.3.1, если что.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 11.07.2019 16:48:06

Ну нет у меня таких старых версий лазаря :-)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 11.07.2019 17:13:10

Ну, в function TToolPanelEditor.GetVerb(Index: integer): string; не нашел идентификатор sRxToolPanelEditor (это register_rxctl.pas)
В RxMDI.pas в procedure TRxMDIButton.DoCloseAllMenu(Sender: TObject); не нашел sQuestion и sCloseAllQuestion. Пришлось комментировать их. Но перевод заработал, сенкс!
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 11.07.2019 19:07:41

Это вроде все константы из самого RxFPC - не должно на них ругаться. Проверь - вся ли библиотека корректно обновлена из svn?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 12.07.2019 09:31:54

Иссесно. И просто из репы обновлял, и даже архивом качал - без разницы. Пороюсь, конечно. Время есть, все равно проект пока только в начальной стадии, даже еще не пре-альфа.

Ха! А в uses просто не было rxconst. Ларчик открывался ну очень просто... Поправь в репе, плз.

Добавлено спустя 52 минуты 41 секунду:
Стоп... А он есть таки... Вообще непонятно...
rxmdi.pas(1113,20) Error: Identifier not found "sQuestion"
P.S. Нашел... Огрызок остался от предыдущей установки через штатный менеджер пакетов. Вот я тупой... :-(

Добавлено спустя 1 час 4 минуты 14 секунд:
И еще про переводы... Добавил вот так:
Код: Выделить всё
procedure TRxMDIButton.UpdateCaption;
begin
  if Assigned(FNavForm) then
  begin
    Caption:=' '+FNavForm.Caption+' ';
    // Перевод заголовка окна в меню Window
    TRxMDIPanel(FNavForm.Owner).RefreshMDIMenu;
  end
  else
    Caption:='---';
  AdjustSize;
end;

Вставишь в свой код? А то получилось, что капшн кнопки он переводит, а в меню - нет.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 12.07.2019 20:35:39

Смотри - добавил
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 09.08.2019 17:22:22

Кстати... Леш, а нет ли возможности сделать, чтоб окна, которые в контейнере MDIPanel, можно было упорядочивать? Каскадом, рядом поставить, плиткой разложить. Может, я просто слепошарый и не вижу?
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 09.08.2019 17:47:50

Нет.
Проблема в том - что у таких окон не будет системных кнопок и заголовка.
А делать самому - мне не хочется. Не получается полностью отрисовать заголовок в текущей теме ОС.
Также надо будет эмулировать рамку вложенного окна - чтобы можно было менять размеры.
Если кто храбрый - милости просим :D .
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 09.08.2019 18:00:10

Ну, вот как-то так. :-) Осталось только добавить соответствующие обработчики на стандартные команды упорядочивания окон
Вложения
example.png
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение Lucifer » 12.08.2019 11:00:57

В общем, обошелся малой кровью пока. Максимизация окна и восстановление размеров оного.
Отключил процедуру TRxMDIPanel.HideCurrentWindow. Просто в тело процедуры дописал Exit, чтоб она не срабатывала. В процедура TRxMDIPanel.ChildWindowsAdd(F: TForm) Сделал F.BorderStyle := bsSIzeable и F.Align := alCustom.
На панель рядом с RxMDICloseButton поставил банальный TSpeedButton с иконкой рестора.
Ну и дописал код, который по этой кнопке просто восстанавливает снова заголовок текущего окна и исходный размер.
Видно, что список там развернут полностью. Ну а карточка - отдельным окном со своим заголовком.
Максимизация:
Код: Выделить всё
procedure TfmOrderCard.FormWindowStateChange(Sender: TObject);
begin
  if dmMain.AForm[FormIndex].WindowState = wsMaximized then;
    dmMain.AForm[FormIndex].BorderStyle := bsNone;
end;

(У меня просто используется массив форм, в который пишутся открытые карточки)
Восстановление текущего окна:
Код: Выделить всё
procedure TfmMain.sbRestoreCurrentWindowClick(Sender: TObject);
begin
  RxMDIPanel.CurrentChildWindow.BorderStyle := bsSizeable;
  RxMDIPanel.CurrentChildWindow.WindowState := wsNormal;
end;

В общем, мне пока и этого хватает. Возможно, потом просто в сам класс TRxMDIPanel допишу потребный функционал.
Вложения
example_1.png
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 12.08.2019 15:39:57

Интересно будет - если сделаешь ещё обёртку для linux (особенно GTK2)
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 16.08.2019 11:07:52

На интересный глюк наступил. Причем - реальный баг, в багтрекере есть, но когда починят - неизвестно. В общем, если BorderStyle формы не bsNone, то при клике на контролах мышей они не получают фокуса. Наблюдается только в MDI-приложении. Поэтому пока отставил в сторону.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение alexs » 16.08.2019 11:17:46

А тебе принципиально - чтобы окна были не на всю рабочую область? У меня пользователи сначала вроде пытались как то это обосновать - но внятно так и не смогли. А потом - вообще привыкли :-)
Самый убойный аргумент был - копировать документы. Я просто в этом случае команду добавил на создание нового документа по образцу.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: RxMDI

Сообщение Lucifer » 16.08.2019 12:50:38

Как раз копировать - вообще не принципиально. У меня копирование сделано процедурами в базе по условиям. А вот сравнить две карточки, копирование между справочниками - это да, надо. Архитектура БД такая, что по-другому просто никак. Или приходится городить тонны лишних костылей. Например, еусть у меня в справочнике поле типа массив, куда заносятся айдюки из другого справочника. Чтобы корректно его заполнить именно существующими данными, сейчас приходится или на бумажку переписывать, или городить промежуточную форму с преобразованием массива в список и обратно. А так было бы удобно - поставил рядышком два нужных окна...

В общем, хрен с ним пока. Потом порешаю проблему.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Re: RxMDI

Сообщение Lucifer » 12.03.2020 15:59:29

Кстати... Заметил один неприятный глюк с ресурсами. Не переводит стандартные меню. Файл ресурсов лежит рядом с прогой. А по правой кнопке мыши все равно остается "Close window", "Close all except this" и так далее. Если эти константы запихать в ресурсные файлы самого проекта, то все переводится нормально. Но компилятор их оттуда все равно вырезает.
Lucifer
постоялец
 
Сообщения: 122
Зарегистрирован: 05.01.2014 21:39:03
Откуда: Новороссийск

Пред.След.

Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru