powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
10 сообщений из 110, страница 5 из 5
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918429
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey

Так у него же Paint перекрыт.

А первой строчкой 100% стоит inherited.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918430
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
А первой строчкой 100% стоит inherited.

Не, он говорит, что затирание происходит до вызова перекрытого Paint.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918440
DimaBr
Kazantsev Alexey

Так у него же Paint перекрыт.

А первой строчкой 100% стоит inherited.

Не стоит. Это первое что тестировал со всех сторон. В может ли perform(WM_SysCommand, $F002+, 0) вызывать событие paint панели игнорируя мой перехват?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918474
Kazantsev Alexey
DimaBr
А первой строчкой 100% стоит inherited.

Не, он говорит, что затирание происходит до вызова перекрытого Paint.

Где-то до, так как на первой строчке Paint - панель уже закрашена.
Kazantsev Alexey

Андрей Игоревич
И если суомпилирвать файл res в 7ке, то и в 10ке всё будет нормально.

Не понял. Если взять .res файл от семёрки и подложить его в проект Delphi 10.3?

Зачем класть, можно сначала скомпилировать программу на 7ке, а потом на 10ке, тогда 10ка подхватит созданный 7кой res (что, наверно, не есть хорошо, но работает прекрасно, пока у нас полностью совпадает содержание). Ну нравится мне интерфейс 7ки с кучей плагинов :). Потому писал на ней, а финально компилировать в 64 бита на 10ке, сейчас вот полностью переезжаю на 10ку, есть у неё некоторые приятные возможности.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918480
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Зачем класть, можно сначала скомпилировать программу на 7ке, а потом на 10ке, тогда 10ка подхватит созданный 7кой res

Похоже, кто-то очень любит нетрадиционный... гхм. Лучше бы уже определиться с версиями окончательно и не искать себе приключений на копчик.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918581
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
type
TMyPanel = class(TPanel)
   procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND;
   procedure Paint;override;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TMyPanel.Create(self) do begin
    Parent := self;
    SetBounds(0,0,200,200);
  end;
end;

{ TMyPanel }

procedure TMyPanel.Paint;
begin

end;

procedure TMyPanel.WMEraseBkgnd(var Message: TWmEraseBkgnd);
begin

end;
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918597
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
.res от десятки включает манифест с 6й версией Common Controls, отсюда и артефакты ИМХО. Что-то там внутри поменялось (те же темы). Можно попробовать в 10ке в свойствах проекта отключить темы вообще (даже родные для винды) и посмотреть что изменится.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39919102
alekcvp
.res от десятки включает манифест с 6й версией Common Controls, отсюда и артефакты ИМХО. Что-то там внутри поменялось (те же темы). Можно попробовать в 10ке в свойствах проекта отключить темы вообще (даже родные для винды) и посмотреть что изменится.

Как включать всякие цветастые стили нашел, как отключать, пока не нашел ).
Kazantsev Alexey
Андрей Игоревич
А вот перехват обработку сообщений я пока до конца не освоил, это через так делать?

Нет, это делать так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
TMyPanel = class
 procedure WMEraseBkgnd(Var AMessage : TMessage); Message WM_ERASEBKGND;
end;
...
procedure TMyPanel.WMEraseBkgnd(Var AMessage : TMessage);
begin
 AMessage.Result := 1;
end;



В общем разобрался как с этим работать, чтоб не мерцало.
1. Надо закрашивать панель в самом начале, при том за пределами границ, иначе на границах будут "артефакты"
Brush.Color:=ClWhite;
Rectangle(-2,-2,width+2,height+2);
2. С перехватом этого сообщения почему-то не работает рисование в буферном БитМапе с последующем присваивании через Canvas.CopyRect. Почему, не понял, ещё подумаю.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39919129
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

Советую экспериментировать не на боевом коде, а в новых тестовых проектах. Никакой жути, типа, рисования за пределами контрола не требуется - отрисовка по ClientRect закрашивает всё, без артефактов.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39919523
Kazantsev Alexey
Андрей Игоревич,

Советую экспериментировать не на боевом коде, а в новых тестовых проектах. Никакой жути, типа, рисования за пределами контрола не требуется - отрисовка по ClientRect закрашивает всё, без артефактов.

В принципе что хотел, получил, спасибо. Через WMEraseBkgnd(Var AMessage : TMessage); Но неужели нет никаких стандартных компонентов под такие задачи, чтоб не городить огород. Ведь в том же "билдере" всё это есть.

Для тестирования накидал пару тысяч спидбатоннов, чтоб нагрузка на форму был, иначе "мерцания" и не увидеть. И, как раз через изменение размеров посредством отлова координат мыши - при больших нагрузка мерцает, а через perform(WM_SysCommand, $, 0) - нет;
Может я как не неправильно размеры меняю? В принципе если через perform работает - то и ладно, но понять почему мерцает через второй способ - интересно.
rкод из MouseMoveV2
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  GetCursorPos(CursPos);
    X1:=CursPos.X;
    Y1:=CursPos.Y;

  dX:=X1-X0; dY:=Y1-Y0;
  if ResizeLegend.Move then
        begin
          Top:=Top+dY;     Left:=Left+dX;
        end;

  if ResizeLegend.Right then Width:=Width+dX;
  if ResizeLegend.Top then
     Begin
      Top:=Top+dY;
      Height:=Height-dY;
     End;
  if ResizeLegend.Left then
   Begin
    left:=left+dX;
    Width:=Width-dX;
   end;
  if ResizeLegend.Bottom then  Height:=Height+dY;
  X0:=X1;  Y0:=Y1;


alekcvp
.res от десятки включает манифест с 6й версией Common Controls, отсюда и артефакты ИМХО. Что-то там внутри поменялось (те же темы). Можно попробовать в 10ке в свойствах проекта отключить темы вообще (даже родные для винды) и посмотреть что изменится.

Нашел где отключается манифест, при отключении - и в старом коде ничего не мерцает. Но это не решение... Кстати, а можно как-то вышить "манифест" в код, у нас на рабочих компах все визуальный настройки в ноль выключены и 10ка как 98я выглядит, и программа там выглядит несколько иначе, нежели на компе, где я компилирую (и где ограничений нет).
...
Рейтинг: 0 / 0
10 сообщений из 110, страница 5 из 5
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]