Страница 30 из 57

Re: САПР на Lazarus

Добавлено: 19.06.2017 21:14:35
zub
Попытался сделать "человечий" докинг https://bugs.freepascal.org/view.php?id=24703
Докается и ресайзится всё хорошо, а вот с сохранением\восстановлением большие проблемы. Если кто в силах помочь - буду благодарен.

Стандартный AnchorDocking не устраивает тем что не умеет первоначально докать "внутрь" главной формы - пытаюсь добавить TAnchorDockPanel на которую первый док будет сделан по "правилу" akClient, а дальше как обычно в анхордокинге. Т.е. нужно вот такое поведение http://imgur.com/a/DyPNR

Re: САПР на Lazarus

Добавлено: 21.06.2017 07:39:21
zub
Проблемы с сохранением-восстановлением вроде решил. Еще потестю и перепишу докинг

Добавлено спустя 8 часов 41 секунду:
Наверно даже переступлю через себя и сделаю основную форму наформошлепаной))

Re: САПР на Lazarus

Добавлено: 03.07.2017 23:37:07
zub
Вроде получилось что-то более-менее годное. если собрать патчи из
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 похоже никому кроме меня ненадо((

Re: САПР на Lazarus

Добавлено: 02.08.2017 11:55:15
zub
Нужна помощь в сохранении-восстановлении панелей инструментов в xml. Настолько люблю этот формат, что как только подумаю что это надо писать - руки тянутся к бутылке))
Выглядеть должно примерно так: пробегаем все видимые кулбары, сохряняем имена и положение всех расположеных на них тулбаров. Ну и восстановление в обратном порядке процедуры поиска кулбара по имени и создания наполненного тулбара по имени с меня

Re: САПР на Lazarus

Добавлено: 04.08.2017 15:15:28
olegy123
Zub, у меня были подозрение, что XML обходишь стороной потому что не любишь.
Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.

Добавлено спустя 2 минуты 4 секунды:
посмотри TXMLPropStorage
http://wiki.freepascal.org/TXMLPropStorage

Re: САПР на Lazarus

Добавлено: 04.08.2017 15:39:50
Sharfik
TXMLPropStorage - Быстрее, чем выпить бутылку.

Re: САПР на Lazarus

Добавлено: 04.08.2017 19:01:29
zub
Не люблю и не умею.
Тут скорее нужен будет TXMLConfigStorage, чтоб запихать всё вместе с настройками анхордокинга, но наверно разница невелика.

Залил на сф бинарники 2291 для посмотреть "новый" докинг и панельки, теперь зкад собирается только с патченым отсюда https://bugs.freepascal.org/view.php?id=24703 анхордокингом, последняя ревизия работающая с стандартным докингом - 2289

Добавлено спустя 3 минуты 53 секунды:
>>Не знаю как точнов Lazarus-е с lfm, но в Delphi можно было сохранять состояние компонента в виде DFM файла.
В лазаре тоже можно сохранять\загружать lfm в рантайме, но нужно нормальное решение, костылей итак давно хватает))

Re: САПР на Lazarus

Добавлено: 04.08.2017 19:40:52
olegy123
zub писал(а):Не люблю и не умею.

А зря.. мне вообще XML помог выстроить зависимости в программе. Когда сложно было определить "кто яйцо, а кто курица". То с написанием XML стразу же видно стало какая структура должна быть в работе.

Re: САПР на Lazarus

Добавлено: 05.08.2017 11:28:06
zub
В данном случае мне нужно просто сохранить положение тулбаров. Никакие другие "волшебные" свойства хмл ненадо))

Добавлено спустя 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 не крадущим фокус?

Re: САПР на Lazarus

Добавлено: 05.08.2017 12:48:19
olegy123
zub писал(а):Никакие другие "волшебные" свойства хмл ненадо))

Заниматься проектированием и не уметь промышленно XML-ить, это нереально..

Re: САПР на Lazarus

Добавлено: 05.08.2017 18:15:38
Лекс Айрин
olegy123 писал(а):Заниматься проектированием и не уметь промышленно XML-ить, это нереально..


Когда придумали CADы, то XML и в проекте не было. Он в нем, не особо и нужен. Это лишь один из многих модных языков разметки.

Re: САПР на Lazarus

Добавлено: 05.08.2017 21:53:51
zub
olegy123
Это какаято подмена понятий, мне надо сохранить\загрузить панельки. XML-ить, да еще в пром масштабах мне без надобности.
ИМХО - xml популярный и почемуто всеми продвигаемый как универсальная панацея - недоуниверсальный недоформат. Посмотри тотже svg - будь любезен парсить патчи ручками

Re: САПР на Lazarus

Добавлено: 06.08.2017 02:28:14
Sharfik
zub писал(а):ИМХО - xml популярный и почему то всеми продвигаемый как универсальная панацея - недоуниверсальный недоформат.

Не формат, а способ разметки формата файлов. Как сам решишь, так и будет задан формат чтения/записи.

Re: САПР на Lazarus

Добавлено: 06.08.2017 02:36:50
zub
В первом приближении сохранение-загрузка панелей заработала, теперь предстоит довольно сильно перелопатить гуй - разделить тулбары и формы.
http://imgur.com/a/V2jAK

Re: САПР на Lazarus

Добавлено: 06.08.2017 02:39:08
Sharfik
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;