САПР на Lazarus
Модератор: Модераторы
Попытался сделать "человечий" докинг https://bugs.freepascal.org/view.php?id=24703
Докается и ресайзится всё хорошо, а вот с сохранением\восстановлением большие проблемы. Если кто в силах помочь - буду благодарен.
Стандартный AnchorDocking не устраивает тем что не умеет первоначально докать "внутрь" главной формы - пытаюсь добавить TAnchorDockPanel на которую первый док будет сделан по "правилу" akClient, а дальше как обычно в анхордокинге. Т.е. нужно вот такое поведение http://imgur.com/a/DyPNR
Докается и ресайзится всё хорошо, а вот с сохранением\восстановлением большие проблемы. Если кто в силах помочь - буду благодарен.
Стандартный AnchorDocking не устраивает тем что не умеет первоначально докать "внутрь" главной формы - пытаюсь добавить TAnchorDockPanel на которую первый док будет сделан по "правилу" akClient, а дальше как обычно в анхордокинге. Т.е. нужно вот такое поведение http://imgur.com/a/DyPNR
Проблемы с сохранением-восстановлением вроде решил. Еще потестю и перепишу докинг
Добавлено спустя 8 часов 41 секунду:
Наверно даже переступлю через себя и сделаю основную форму наформошлепаной))
Добавлено спустя 8 часов 41 секунду:
Наверно даже переступлю через себя и сделаю основную форму наформошлепаной))
Вроде получилось что-то более-менее годное. если собрать патчи из
https://bugs.freepascal.org/view.php?id=24703 - анхордокинг на панель
https://bugs.freepascal.org/view.php?id=32027 - докающиесе тулбары
То получится что-то вроде https://sourceforge.net/projects/zcad/f ... z/download - анхордокинг в центре, панельки по периметру - так я и хочу сделать в зкаде.
Но 32027 в транк добавляют, а 24703 похоже никому кроме меня ненадо((
https://bugs.freepascal.org/view.php?id=24703 - анхордокинг на панель
https://bugs.freepascal.org/view.php?id=32027 - докающиесе тулбары
То получится что-то вроде https://sourceforge.net/projects/zcad/f ... z/download - анхордокинг в центре, панельки по периметру - так я и хочу сделать в зкаде.
Но 32027 в транк добавляют, а 24703 похоже никому кроме меня ненадо((
Нужна помощь в сохранении-восстановлении панелей инструментов в xml. Настолько люблю этот формат, что как только подумаю что это надо писать - руки тянутся к бутылке))
Выглядеть должно примерно так: пробегаем все видимые кулбары, сохряняем имена и положение всех расположеных на них тулбаров. Ну и восстановление в обратном порядке процедуры поиска кулбара по имени и создания наполненного тулбара по имени с меня
Выглядеть должно примерно так: пробегаем все видимые кулбары, сохряняем имена и положение всех расположеных на них тулбаров. Ну и восстановление в обратном порядке процедуры поиска кулбара по имени и создания наполненного тулбара по имени с меня
Zub, у меня были подозрение, что XML обходишь стороной потому что не любишь.
Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.
Добавлено спустя 2 минуты 4 секунды:
посмотри TXMLPropStorage
http://wiki.freepascal.org/TXMLPropStorage
Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.
Добавлено спустя 2 минуты 4 секунды:
посмотри TXMLPropStorage
http://wiki.freepascal.org/TXMLPropStorage
TXMLPropStorage - Быстрее, чем выпить бутылку.
Не люблю и не умею.
Тут скорее нужен будет TXMLConfigStorage, чтоб запихать всё вместе с настройками анхордокинга, но наверно разница невелика.
Залил на сф бинарники 2291 для посмотреть "новый" докинг и панельки, теперь зкад собирается только с патченым отсюда https://bugs.freepascal.org/view.php?id=24703 анхордокингом, последняя ревизия работающая с стандартным докингом - 2289
Добавлено спустя 3 минуты 53 секунды:
>>Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.
В лазаре тоже можно сохранять\загружать lfm в рантайме, но нужно нормальное решение, костылей итак давно хватает))
Тут скорее нужен будет TXMLConfigStorage, чтоб запихать всё вместе с настройками анхордокинга, но наверно разница невелика.
Залил на сф бинарники 2291 для посмотреть "новый" докинг и панельки, теперь зкад собирается только с патченым отсюда https://bugs.freepascal.org/view.php?id=24703 анхордокингом, последняя ревизия работающая с стандартным докингом - 2289
Добавлено спустя 3 минуты 53 секунды:
>>Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.
В лазаре тоже можно сохранять\загружать lfm в рантайме, но нужно нормальное решение, костылей итак давно хватает))
zub писал(а):Не люблю и не умею.
А зря.. мне вообще XML помог выстроить зависимости в программе. Когда сложно было определить "кто яйцо, а кто курица". То с написанием XML стразу же видно стало какая структура должна быть в работе.
В данном случае мне нужно просто сохранить положение тулбаров. Никакие другие "волшебные" свойства хмл ненадо))
Добавлено спустя 13 часов 26 минут 15 секунд:
Тыкаю палочкой http://svn.shamangrad.net/zcad/trunk/ca ... sutils.pas
ToolBarU лежит на CoolBarU, ToolBarR в "плавающем" состоянии с такимито координатами.
Нарисовалась еще проблема - плавающие тулбары по умолчанию создаются на TCustomDockForm и крадут фокус у формы при назатии кнопок. Фокус вернуть не проблема, но при этом "моргают" декорации окон(( чем можно заменить TCustomDockForm не крадущим фокус?
Добавлено спустя 13 часов 26 минут 15 секунд:
Тыкаю палочкой http://svn.shamangrad.net/zcad/trunk/ca ... sutils.pas
Код: Выделить всё
<ToolBarsConfig>
<CoolBar0 Name="CoolBarU">
<ToolBar0 Name="ToolBarU"/>
</CoolBar0>
<CoolBar1 Name="CoolBarL"/>
<CoolBar2 Name="CoolBarR"/>
<FloatToolbar0 Name="ToolBarR" BoundsRectTop="76" BoundsRectLeft="731" BoundsRectRight="759" BoundsRectBottom="531"/>
<CoolBar3 Name="CoolBarD"/>
</ToolBarsConfig>ToolBarU лежит на CoolBarU, ToolBarR в "плавающем" состоянии с такимито координатами.
Нарисовалась еще проблема - плавающие тулбары по умолчанию создаются на TCustomDockForm и крадут фокус у формы при назатии кнопок. Фокус вернуть не проблема, но при этом "моргают" декорации окон(( чем можно заменить TCustomDockForm не крадущим фокус?
zub писал(а):Никакие другие "волшебные" свойства хмл ненадо))
Заниматься проектированием и не уметь промышленно XML-ить, это нереально..
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
olegy123 писал(а):Заниматься проектированием и не уметь промышленно XML-ить, это нереально..
Когда придумали CADы, то XML и в проекте не было. Он в нем, не особо и нужен. Это лишь один из многих модных языков разметки.
olegy123
Это какаято подмена понятий, мне надо сохранить\загрузить панельки. XML-ить, да еще в пром масштабах мне без надобности.
ИМХО - xml популярный и почемуто всеми продвигаемый как универсальная панацея - недоуниверсальный недоформат. Посмотри тотже svg - будь любезен парсить патчи ручками
Это какаято подмена понятий, мне надо сохранить\загрузить панельки. XML-ить, да еще в пром масштабах мне без надобности.
ИМХО - xml популярный и почемуто всеми продвигаемый как универсальная панацея - недоуниверсальный недоформат. Посмотри тотже svg - будь любезен парсить патчи ручками
zub писал(а):ИМХО - xml популярный и почему то всеми продвигаемый как универсальная панацея - недоуниверсальный недоформат.
Не формат, а способ разметки формата файлов. Как сам решишь, так и будет задан формат чтения/записи.
В первом приближении сохранение-загрузка панелей заработала, теперь предстоит довольно сильно перелопатить гуй - разделить тулбары и формы.
http://imgur.com/a/V2jAK
http://imgur.com/a/V2jAK
zub писал(а):Нарисовалась еще проблема - плавающие тулбары по умолчанию создаются на TCustomDockForm и крадут фокус у формы при назатии кнопок. Фокус вернуть не проблема, но при этом "моргают" декорации окон(( чем можно заменить TCustomDockForm не крадущим фокус?
Не знаю как в Unix, но в Windows у меня были проблемы с морганием при рисовании на канве и тогда использовал две процедуры что ниже. При создании контроллов их владельца тоже надо блокировать на обновление картинки.
Код: Выделить всё
procedure BeginScreenUpdate(hwnd: THandle);
begin
try
SendMessage(hwnd, WM_SETREDRAW, 0, 0);
finally
end;
end;
procedure EndScreenUpdate(hwnd: THandle; erase: Boolean);
begin
try
SendMessage(hwnd, WM_SETREDRAW, 1, 0);
{RedrawWindow(hwnd, nil, 0, DW_FRAME + RDW_INVALIDATE +
RDW_ALLCHILDREN + RDW_NOINTERNALPAINT);
if (erase) then
Windows.InvalidateRect(hwnd, nil, True); }
finally
end;
end;
