RxMDI
Модераторы: alexs, Модераторы
Для транковой версии лазаря, как я понял? В релизе 2.0.2 не собирается. Пришлось комментировать непонятные компилятору куски. FPC 3.3.1, если что.
Ну, в function TToolPanelEditor.GetVerb(Index: integer): string; не нашел идентификатор sRxToolPanelEditor (это register_rxctl.pas)
В RxMDI.pas в procedure TRxMDIButton.DoCloseAllMenu(Sender: TObject); не нашел sQuestion и sCloseAllQuestion. Пришлось комментировать их. Но перевод заработал, сенкс!
В RxMDI.pas в procedure TRxMDIButton.DoCloseAllMenu(Sender: TObject); не нашел sQuestion и sCloseAllQuestion. Пришлось комментировать их. Но перевод заработал, сенкс!
Иссесно. И просто из репы обновлял, и даже архивом качал - без разницы. Пороюсь, конечно. Время есть, все равно проект пока только в начальной стадии, даже еще не пре-альфа.
Ха! А в uses просто не было rxconst. Ларчик открывался ну очень просто... Поправь в репе, плз.
Добавлено спустя 52 минуты 41 секунду:
Стоп... А он есть таки... Вообще непонятно...
rxmdi.pas(1113,20) Error: Identifier not found "sQuestion"
P.S. Нашел... Огрызок остался от предыдущей установки через штатный менеджер пакетов. Вот я тупой...
Добавлено спустя 1 час 4 минуты 14 секунд:
И еще про переводы... Добавил вот так:
Вставишь в свой код? А то получилось, что капшн кнопки он переводит, а в меню - нет.
Ха! А в 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;
Вставишь в свой код? А то получилось, что капшн кнопки он переводит, а в меню - нет.
Кстати... Леш, а нет ли возможности сделать, чтоб окна, которые в контейнере MDIPanel, можно было упорядочивать? Каскадом, рядом поставить, плиткой разложить. Может, я просто слепошарый и не вижу?
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Нет.
Проблема в том - что у таких окон не будет системных кнопок и заголовка.
А делать самому - мне не хочется. Не получается полностью отрисовать заголовок в текущей теме ОС.
Также надо будет эмулировать рамку вложенного окна - чтобы можно было менять размеры.
Если кто храбрый - милости просим
.
Проблема в том - что у таких окон не будет системных кнопок и заголовка.
А делать самому - мне не хочется. Не получается полностью отрисовать заголовок в текущей теме ОС.
Также надо будет эмулировать рамку вложенного окна - чтобы можно было менять размеры.
Если кто храбрый - милости просим
Ну, вот как-то так.
Осталось только добавить соответствующие обработчики на стандартные команды упорядочивания окон
В общем, обошелся малой кровью пока. Максимизация окна и восстановление размеров оного.
Отключил процедуру TRxMDIPanel.HideCurrentWindow. Просто в тело процедуры дописал Exit, чтоб она не срабатывала. В процедура TRxMDIPanel.ChildWindowsAdd(F: TForm) Сделал F.BorderStyle := bsSIzeable и F.Align := alCustom.
На панель рядом с RxMDICloseButton поставил банальный TSpeedButton с иконкой рестора.
Ну и дописал код, который по этой кнопке просто восстанавливает снова заголовок текущего окна и исходный размер.
Видно, что список там развернут полностью. Ну а карточка - отдельным окном со своим заголовком.
Максимизация:
(У меня просто используется массив форм, в который пишутся открытые карточки)
Восстановление текущего окна:
В общем, мне пока и этого хватает. Возможно, потом просто в сам класс TRxMDIPanel допишу потребный функционал.
Отключил процедуру 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 допишу потребный функционал.
На интересный глюк наступил. Причем - реальный баг, в багтрекере есть, но когда починят - неизвестно. В общем, если BorderStyle формы не bsNone, то при клике на контролах мышей они не получают фокуса. Наблюдается только в MDI-приложении. Поэтому пока отставил в сторону.
- alexs
- долгожитель
- Сообщения: 4066
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
А тебе принципиально - чтобы окна были не на всю рабочую область? У меня пользователи сначала вроде пытались как то это обосновать - но внятно так и не смогли. А потом - вообще привыкли 
Самый убойный аргумент был - копировать документы. Я просто в этом случае команду добавил на создание нового документа по образцу.
Самый убойный аргумент был - копировать документы. Я просто в этом случае команду добавил на создание нового документа по образцу.
Как раз копировать - вообще не принципиально. У меня копирование сделано процедурами в базе по условиям. А вот сравнить две карточки, копирование между справочниками - это да, надо. Архитектура БД такая, что по-другому просто никак. Или приходится городить тонны лишних костылей. Например, еусть у меня в справочнике поле типа массив, куда заносятся айдюки из другого справочника. Чтобы корректно его заполнить именно существующими данными, сейчас приходится или на бумажку переписывать, или городить промежуточную форму с преобразованием массива в список и обратно. А так было бы удобно - поставил рядышком два нужных окна...
В общем, хрен с ним пока. Потом порешаю проблему.
В общем, хрен с ним пока. Потом порешаю проблему.
Кстати... Заметил один неприятный глюк с ресурсами. Не переводит стандартные меню. Файл ресурсов лежит рядом с прогой. А по правой кнопке мыши все равно остается "Close window", "Close all except this" и так далее. Если эти константы запихать в ресурсные файлы самого проекта, то все переводится нормально. Но компилятор их оттуда все равно вырезает.
