Страница 2 из 3

Re: RxMDI

СообщениеДобавлено: 11.07.2019 15:06:48
Lucifer
Для транковой версии лазаря, как я понял? В релизе 2.0.2 не собирается. Пришлось комментировать непонятные компилятору куски. FPC 3.3.1, если что.

Re: RxMDI

СообщениеДобавлено: 11.07.2019 16:48:06
alexs
Ну нет у меня таких старых версий лазаря :-)

Re: RxMDI

СообщениеДобавлено: 11.07.2019 17: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 19:07:41
alexs
Это вроде все константы из самого RxFPC - не должно на них ругаться. Проверь - вся ли библиотека корректно обновлена из svn?

Re: RxMDI

СообщениеДобавлено: 12.07.2019 09:31:54
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 20:35:39
alexs
Смотри - добавил

Re: RxMDI

СообщениеДобавлено: 09.08.2019 17:22:22
Lucifer
Кстати... Леш, а нет ли возможности сделать, чтоб окна, которые в контейнере MDIPanel, можно было упорядочивать? Каскадом, рядом поставить, плиткой разложить. Может, я просто слепошарый и не вижу?

Re: RxMDI

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

Re: RxMDI

СообщениеДобавлено: 09.08.2019 18:00:10
Lucifer
Ну, вот как-то так. :-) Осталось только добавить соответствующие обработчики на стандартные команды упорядочивания окон

Re: RxMDI

СообщениеДобавлено: 12.08.2019 11: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 15:39:57
alexs
Интересно будет - если сделаешь ещё обёртку для linux (особенно GTK2)

Re: RxMDI

СообщениеДобавлено: 16.08.2019 11:07:52
Lucifer
На интересный глюк наступил. Причем - реальный баг, в багтрекере есть, но когда починят - неизвестно. В общем, если BorderStyle формы не bsNone, то при клике на контролах мышей они не получают фокуса. Наблюдается только в MDI-приложении. Поэтому пока отставил в сторону.

Re: RxMDI

СообщениеДобавлено: 16.08.2019 11:17:46
alexs
А тебе принципиально - чтобы окна были не на всю рабочую область? У меня пользователи сначала вроде пытались как то это обосновать - но внятно так и не смогли. А потом - вообще привыкли :-)
Самый убойный аргумент был - копировать документы. Я просто в этом случае команду добавил на создание нового документа по образцу.

Re: RxMDI

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

В общем, хрен с ним пока. Потом порешаю проблему.

Re: RxMDI

СообщениеДобавлено: 12.03.2020 15:59:29
Lucifer
Кстати... Заметил один неприятный глюк с ресурсами. Не переводит стандартные меню. Файл ресурсов лежит рядом с прогой. А по правой кнопке мыши все равно остается "Close window", "Close all except this" и так далее. Если эти константы запихать в ресурсные файлы самого проекта, то все переводится нормально. Но компилятор их оттуда все равно вырезает.