Страница 2 из 3
Re: RxMDI
Добавлено: 11.07.2019 14:06:48
Lucifer
Для транковой версии лазаря, как я понял? В релизе 2.0.2 не собирается. Пришлось комментировать непонятные компилятору куски. FPC 3.3.1, если что.
Re: RxMDI
Добавлено: 11.07.2019 15:48:06
alexs
Ну нет у меня таких старых версий лазаря

Re: RxMDI
Добавлено: 11.07.2019 16:13:10
Lucifer
Ну, в function TToolPanelEditor.GetVerb(Index: integer): string; не нашел идентификатор sRxToolPanelEditor (это register_rxctl.pas)
В RxMDI.pas в procedure TRxMDIButton.DoCloseAllMenu(Sender: TObject); не нашел sQuestion и sCloseAllQuestion. Пришлось комментировать их. Но перевод заработал, сенкс!
Re: RxMDI
Добавлено: 11.07.2019 18:07:41
alexs
Это вроде все константы из самого RxFPC - не должно на них ругаться. Проверь - вся ли библиотека корректно обновлена из svn?
Re: RxMDI
Добавлено: 12.07.2019 10:28:49
Lucifer
Иссесно. И просто из репы обновлял, и даже архивом качал - без разницы. Пороюсь, конечно. Время есть, все равно проект пока только в начальной стадии, даже еще не пре-альфа.
Ха! А в 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;
Вставишь в свой код? А то получилось, что капшн кнопки он переводит, а в меню - нет.
Re: RxMDI
Добавлено: 12.07.2019 19:35:39
alexs
Смотри - добавил
Re: RxMDI
Добавлено: 09.08.2019 16:22:22
Lucifer
Кстати... Леш, а нет ли возможности сделать, чтоб окна, которые в контейнере MDIPanel, можно было упорядочивать? Каскадом, рядом поставить, плиткой разложить. Может, я просто слепошарый и не вижу?
Re: RxMDI
Добавлено: 09.08.2019 16:47:50
alexs
Нет.
Проблема в том - что у таких окон не будет системных кнопок и заголовка.
А делать самому - мне не хочется. Не получается полностью отрисовать заголовок в текущей теме ОС.
Также надо будет эмулировать рамку вложенного окна - чтобы можно было менять размеры.
Если кто храбрый - милости просим

.
Re: RxMDI
Добавлено: 09.08.2019 17:00:10
Lucifer
Ну, вот как-то так.

Осталось только добавить соответствующие обработчики на стандартные команды упорядочивания окон
Re: RxMDI
Добавлено: 12.08.2019 10:00:57
Lucifer
В общем, обошелся малой кровью пока. Максимизация окна и восстановление размеров оного.
Отключил процедуру 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 допишу потребный функционал.
Re: RxMDI
Добавлено: 12.08.2019 14:39:57
alexs
Интересно будет - если сделаешь ещё обёртку для linux (особенно GTK2)
Re: RxMDI
Добавлено: 16.08.2019 10:07:52
Lucifer
На интересный глюк наступил. Причем - реальный баг, в багтрекере есть, но когда починят - неизвестно. В общем, если BorderStyle формы не bsNone, то при клике на контролах мышей они не получают фокуса. Наблюдается только в MDI-приложении. Поэтому пока отставил в сторону.
Re: RxMDI
Добавлено: 16.08.2019 10:17:46
alexs
А тебе принципиально - чтобы окна были не на всю рабочую область? У меня пользователи сначала вроде пытались как то это обосновать - но внятно так и не смогли. А потом - вообще привыкли

Самый убойный аргумент был - копировать документы. Я просто в этом случае команду добавил на создание нового документа по образцу.
Re: RxMDI
Добавлено: 16.08.2019 11:50:38
Lucifer
Как раз копировать - вообще не принципиально. У меня копирование сделано процедурами в базе по условиям. А вот сравнить две карточки, копирование между справочниками - это да, надо. Архитектура БД такая, что по-другому просто никак. Или приходится городить тонны лишних костылей. Например, еусть у меня в справочнике поле типа массив, куда заносятся айдюки из другого справочника. Чтобы корректно его заполнить именно существующими данными, сейчас приходится или на бумажку переписывать, или городить промежуточную форму с преобразованием массива в список и обратно. А так было бы удобно - поставил рядышком два нужных окна...
В общем, хрен с ним пока. Потом порешаю проблему.
Re: RxMDI
Добавлено: 12.03.2020 14:59:29
Lucifer
Кстати... Заметил один неприятный глюк с ресурсами. Не переводит стандартные меню. Файл ресурсов лежит рядом с прогой. А по правой кнопке мыши все равно остается "Close window", "Close all except this" и так далее. Если эти константы запихать в ресурсные файлы самого проекта, то все переводится нормально. Но компилятор их оттуда все равно вырезает.