Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26113
Рейтинг: 2126
#46: 2022-01-15 13:31:52 ЛС | профиль | цитата
andrestudio писал(а):
сейчас у тебя должно работать

Да, работает, отлично работает. И сплиттер отрабатывает нормально (меня поразило, как ты так точно синхронизировал параметры сплиттеров). Все же надо отказываться от Constraints для всех контролов и оставить их только для формы.
Я вообще отказался от внешнего метода и все перетащил в обработчик. Вряд ли метод SetAnchors где-то еще понадобится.
Вот вызов сообщения установки Anchors:
    WM_WINDOWPOSCHANGED:
begin
(*
if (Control.MinWidth <> 0) and (Control.Width < Control.MinWidth) then Control.Width := Control.MinWidth;
if (Control.MaxWidth <> 0) and (Control.Width > Control.MaxWidth) then Control.Width := Control.MaxWidth;
if (Control.MinHeight <> 0) and (Control.Height < Control.MinHeight) then Control.Height := Control.MinHeight;
if (Control.MaxHeight <> 0) and (Control.Height > Control.MaxHeight) then Control.Height := Control.MaxHeight;
*)
if (Control.ChildCount <> 0) and (fLayout = nil) then
for i := 0 to Control.ChildCount - 1 do
if (Control.Children[i].Align = caNone) then
Sendmessage(Control.Children[i].Handle, US_SETANCHORS, 0, 0);
Control.Update;
end;
А вот, собственно, и отработка сообщения Anchors:
//
//!!! Код предложен andrestudio
//
US_SETANCHORS:
begin
if _prop_akRight then
if not _prop_akLeft then
SetWindowPos(Control.Handle, 0, Control.Parent.Width - (fDefWidth + fDefRight), Control.Top, fDefWidth, Control.Height, SWP_NOZORDER)
else
SetWindowPos(Control.Handle, 0, fDefLeft, Control.Top, Control.Parent.Width - (fDefLeft + fDefRight), Control.Height, SWP_NOZORDER);

if _prop_akBottom then
if not _prop_akTop then
SetWindowPos(Control.Handle, 0, Control.Left, Control.Parent.Height - (fDefHeight + fDefBottom), Control.Width, fDefHeight, SWP_NOZORDER)
else
SetWindowPos(Control.Handle, 0, Control.Left, Control.Top, Control.Width, Control.Parent.Height - (fDefTop + fDefBottom), SWP_NOZORDER);
end;
end;

Редактировалось 3 раз(а), последний 2022-01-15 13:37:58
карма: 22

0
Ответов: 5227
Рейтинг: 587
#47: 2022-01-15 15:49:43 ЛС | профиль | цитата
nesco, у меня в WM_WINDOWPOSCHANGED либо только в форме работает либо вообще не работает ничего. (видать я где то что то в своё время наколбасил) На меня не оглядывайся делай как считаешь нужным, надеюсь пользователи оценят простоту и удобство для создания дружелюбных интерфейсов.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#48: 2022-01-15 15:57:20 ЛС | профиль | цитата
andrestudio писал(а):
nesco, у меня в WM_WINDOWPOSCHANGED либо только в форме работает либо вообще не работает ничего. (видать я где то что то в своё время наколбасил) На меня не оглядывайся делай как считаешь нужным, надеюсь пользователи оценят простоту и удобство для создания дружелюбных интерфейсов.

Можно и в WM_SIZE поставить. А если раскоммитить код MinMax, то можно получить интересный эффект
Вот схема, но будет ли она у тебя работать?
Схема

Add(MainForm,2953706,266,98)
{
Width=420
Height=285
MinWidth=190
MinHeight=155
MaxWidth=600
MaxHeight=600
Position=1
Point(onResize)
}
Add(ChildPanel,9554533,266,154)
{
}
BEGIN_SDK
Add(EditMulti,1080472,21,21)
{
}
Add(Panel,13630585,56,105)
{
Left=10
Top=10
Width=380
Height=225
akRight=0
akBottom=0
Point(onResize)
}
Add(Memo,14371164,161,105)
{
Left=25
Top=35
Width=195
akRight=0
akBottom=0
MinWidth=100
MinHeight=21
}
END_SDK

Вот как работает эта схема

А вот это желательно добавить в Init для MinMax
      if _prop_MinWidth >= Width then
MinWidth := Width
else
MinWidth := _prop_MinWidth;

if _prop_MinHeight >= Height then
MinHeight := Height
else
MinHeight := _prop_MinHeight;

if (_prop_MaxWidth <= Width) and (_prop_MaxWidth <> 0) then
MaxWidth := Width
else
MaxWidth := _prop_MaxWidth;

if (_prop_MaxHeight <= Height) and (_prop_MaxHeight <> 0) then // Тут раньше была ошибка, вместо Height стояла Width
MaxHeight := Height
else
MaxHeight := _prop_MaxHeight;
Это корректирует начальные параметры и привязывает их к форме. А то получается -- ты настроил интерфейс, установил ошибочный MinMax, и при включении у тебя все изменило размеры и вышло за пределы формы.

--- Добавлено в 2022-01-15 16:12:42

andrestudio писал(а):
надеюсь пользователи оценят простоту и удобство для создания дружелюбных интерфейсов

Че-то все затихли. Кроме тебя и NetSpirit-a никто больше не отписался. Может, никому больше не нужно? Ладно поюзать еще не могут, но хоть бы мявкнули про нужность или ненужность.

P.S. Предупреждаю, что если выйдет обновление, то это будет глобальный патч. Я полностью переформатирую код, мне надоело ковыряться в написанных каракулях. Все старое останется "как есть", просто читаемость будет выше, а новое будет уже по-новому. А то мой перфекционизм уже страшно негодуэ.

Редактировалось 16 раз(а), последний 2022-01-15 23:49:09
карма: 22

0
Ответов: 207
Рейтинг: 14
#49: 2022-01-15 16:46:34 ЛС | профиль | цитата
nesco писал(а):
Может, никому больше не нужно?

Конечно нужно. Еще можно добавить AlignWithMargins. Для включения - отключения Margins. По умолчанию все значения Margins сделать - 3, как в Delphi.

Редактировалось 1 раз(а), последний 2022-01-15 16:46:50
карма: 2

0
Ответов: 2059
Рейтинг: 132
#50: 2022-01-15 17:25:26 ЛС | профиль | цитата
Че-то все затихли. Кроме тебя и NetSpirit-a никто больше не отписался. Может, никому больше не нужно?

А чего толку писать? Я лет пять, если не десять, за эти нововведения от andrestudio ратовал.
Просто теперь каждый развивает свою версию HiAsm, порою даже несовместимые друг с другом.
У меня уже с 11 года это всё есть.
Только сейчас это всё не актуально!
Мир движется вперёд.
Если уж не кроссплатформенная версия HiAsm нужна, то С++ это точно.
Что-то типа на MinGW в основе, а не Visual Studio.

Редактировалось 4 раз(а), последний 2022-01-15 17:47:01
карма: 6

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#51: 2022-01-15 17:58:05 ЛС | профиль | цитата
Joiner писал(а):
Еще можно добавить AlignWithMargins. Для включения - отключения Margins.

Ну, это все будет уже лишним. Подумаю на этим.
flint2 писал(а):
Если уж не кроссплатформенная версия HiAsm нужна, то С++ это точно

.Net же вроде есть, только пользователей там что-то маловато.
flint2 писал(а):
Просто теперь каждый развивает свою версию HiAsm

И много ли таких версий? Вот только вас двоих и знаю. А тут у нас получается: не делаешь ничего -- хреново, делаешь -- тоже хреново.

P.S. А про Anchors-ы серьезно заговорили только в 2016, чуть больше пять лет назад. Но пять лет назад мне было не до этого.

Редактировалось 1 раз(а), последний 2022-01-15 18:15:26
карма: 22

0
Ответов: 207
Рейтинг: 14
#52: 2022-01-15 18:17:09 ЛС | профиль | цитата
nesco писал(а):
Ну, это все будет уже лишним.

Да, я сразу не понял что реализован ChildMargin, а не Margin и действует он не на каждый компонент в отдельности. В таком варианте согласен, что это уже лишнее.
карма: 2

0
Ответов: 2059
Рейтинг: 132
#53: 2022-01-15 18:17:23 ЛС | профиль | цитата
nesco писал(а):
не делаешь ничего -- хреново, делаешь -- тоже хреново.
Нет, не правильно!
Лучше больше, чем никогда!
nesco писал(а):
.Net же вроде есть, только пользователей там что-то маловато.

Я Nic`у уже объяснял, почему не взлетит...
Мне так и не удалось ни разу нормально установить и запустить.
Установка, в идеале, должна быть из Zip`а и без привязки к Visual Studio. Хотя у меня стоит и Visual Studio и Unity, и Unreal Engine и всё прекрасно работает, после установки inline всё падает...
И C++ надо, а не C#. В общем я забил на Net вариант HiAsm`а, и всё теперь делаю в VS, если примеры сюда https://gamedev.ru/code/forum/ надо сделать.
Как уже говорил, что без привязки к VS надо делать!!! Вариантов много. Надо обсуждать и приводить свои доводы и примеры в пользу той, или иной платформы.

Редактировалось 2 раз(а), последний 2022-01-15 18:35:29
карма: 6

0
Ответов: 4628
Рейтинг: 749
#54: 2022-01-15 20:01:24 ЛС | профиль | цитата
nesco писал(а):
Че-то все затихли.
Это такая стандартная и древняя вещь, что как бы даже особо обсуждения не требует. Лишь бы работало и красиво было реализовано.
nesco писал(а):
А то мой перфекционизм уже страшно негодуэ.
Люто поддерживаю!

Редактировалось 1 раз(а), последний 2022-01-15 20:01:43
карма: 26

0
Ответов: 5227
Рейтинг: 587
#55: 2022-01-16 08:47:56 ЛС | профиль | цитата
nesco писал(а):
Вот схема, но будет ли она у тебя работать?

я пока выбыл, хворь привязалась какая то.
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0
Разработчик
Ответов: 26113
Рейтинг: 2126
#56: 2022-01-16 13:45:58 ЛС | профиль | цитата
andrestudio писал(а):
я пока выбыл, хворь привязалась какая то

Ты там это, держись.
карма: 22

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#57: 2022-01-17 05:16:57 ЛС | профиль | цитата
Ха! Мне наконец-то удалось заставить отрисовывать контекст на стандартных панелях не нарушая целостность самого контекста панели



Вот тут возникает закономерный вопрос -- а надо ли сохранять контекст? А то у нас кто в лес, кто по дрова. Форма сохраняет, Rush-панель сохраняет, а вот кнопка и панель -- нет.
Короче -- ??? В принципе, можно попытаться добавить свойство, например -- SelfContext

Редактировалось 5 раз(а), последний 2022-01-17 05:25:34
карма: 22

0
Ответов: 303
Рейтинг: 26
#58: 2022-01-17 11:21:05 ЛС | профиль | цитата
Молодцы, получилось отлично
Спасибо за ваши труды.
карма: 2
0
Ответов: 2059
Рейтинг: 132
#59: 2022-01-17 13:58:59 ЛС | профиль | цитата
nesco писал(а):
например -- SelfContext

Мысль здравая!
карма: 6

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#60: 2022-01-17 14:11:36 ЛС | профиль | цитата
flint2 писал(а):
Мысль здравая!

Я вот все думаю -- ну зачем на отрисовку предоставлять лысый контекст, смысл тогда этой внешней отрисовки? Интерес предоставляет, КМК, отрисовка на уже готовом контексте, картинку там добавить, оверлей какой наложить. А так можно на ту же панель наложить с перекрытием PaintBox, и рисуй чего хочешь. Ведь когда я рисую на Handl-e, я не уничтожаю уже отрисованный контекст, скорее он испортит мой рисунок.

Редактировалось 3 раз(а), последний 2022-01-17 14:14:16
карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)