powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Создание компонента сложной формы (аккуратной контурной стрелки).
25 сообщений из 110, страница 4 из 5
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878469
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичёёёёёАвтар, http://docwiki.embarcadero.com/RADStudio/Rio/en/Methods_(Delphi)#Final_Methods
Слегка не понял. Да и на 7ке, вроде, не работает, как я понимаю. Но поизучаю поподробнее.
...
"Запечатывание" виртуального метода, запрещающее перекрытие в наследнике.
Да, в 7-ке не работает.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878471
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичА, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел...
Может быть, тебе protected члены нужны? http://www.delphibasics.ru/Protected.php
protected члены класса доступны в наследниках, но из других объектов - недоступны. Ну, кроме тех, которые в том же модуле (юните) находятся.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878479
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёalekcvp strict protected ?
Из другой оперы, немного.
ёёёёёМожет быть, тебе protected члены нужны? http://www.delphibasics.ru/Protected.php
WAT? O_o
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878487
ёёёёёАндрей ИгоревичА, и ещё хотел спросить, можно ли сделать, что бы процедура/функция или свойство было доступно только для потомка (не глубже), а уже для основной программы всё было недоступно, кажется где-то я что-то такое видел...
Может быть, тебе protected члены нужны? http://www.delphibasics.ru/Protected.php
protected члены класса доступны в наследниках, но из других объектов - недоступны. Ну, кроме тех, которые в том же модуле (юните) находятся.
Я вот всегда туплю в определении "наследник".

Код: pascal
1.
2.
3.
TClassB = class (TClassA)
   ClassD: TClassD;
End;


Вопрос - наследник/потомок это ClassB от ClassA или ClassD потомок от ClassB? Или тут более хитрая терминология. Просто в интернете и то и то видел как называют потомком.
В первом случае protected доступны, во втором нет.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878489
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревичёёёёёпропущено...

Может быть, тебе protected члены нужны? http://www.delphibasics.ru/Protected.php
protected члены класса доступны в наследниках, но из других объектов - недоступны. Ну, кроме тех, которые в том же модуле (юните) находятся.
Я вот всегда туплю в определении "наследник".

Код: pascal
1.
2.
3.
TClassB = class (TClassA)
   ClassD: TClassD;
End;


Вопрос - наследник/потомок это ClassB от ClassA или ClassD потомок от ClassB? Или тут более хитрая терминология. Просто в интернете и то и то видел как называют потомком.
В первом случае protected доступны, во втором нет.

Класс TClassA - родитель класса TClassВ.
Класс TClassB - наследник класса TClassА.
Класс TClassB связан с классом TClassА отношением "наследование".

Объекта класса TClassD агрегирован в класс TClassB.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878495
ёёёёёкласса TClassD агрегирован в класс TClassB.
Жуть, первый раз вижу такой термин применительно к Delphi.
В общем я писал про доступность из агрегированных классов к процедурам ээ...ээ.. агрегатора?
И наоборот.

Хотя основной мой вопрос был, почему Inherites проскакивало через несколько наследников(тут всё корректно) сразу к Panel, может ли быть это связано с owner, который я не переприсваивал у потомков (обходясь parent).
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878499
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич...почему Inherites проскакивало через несколько наследников...
Не было такого, "мамой клянусь".
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878730
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем случае мне больше нравятся термины: "унаследован от", "предок", "наследник"
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878732
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичНу так, в рамках развития потихоньку приучаю себя к культуре :), когда программа разрастается до очень больших размеров это очень помогает. Ну и очень помогает, когда свой код читаешь через некоторое время.Это все жалкое подобие развитию при работе в команде - регулярное code review с обсуждением спорных мест и решений, плюс сразу можно оценить качество кода и стоимость поддержки. Если твой код будет прозрачен для других программистов - значит движение идет в правильном направлении.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39878818
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ИгоревичХотя основной мой вопрос был, почему Inherites проскакивало через несколько наследников(тут всё корректно) сразу к Panel
Единственное, что мне приходит в голову - это то, что где-то в этой цепочке у переопределения методов было пропущено слово override (при этом должно быть предупреждение от компилятора), в результате inherites обращался к последнему переопределённому методу, а не к этим.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918342
В свете перехода мной с Delphi 7 на 10 начинают возникать куча мелких непонятных проблем в уже, казалось бы сделанных вещах.

Вкратце. "Главная" панель - перехватываю paint - рисую нужную мне картинку (через буферный BitMap).
На "главной" панели размещены другие панели с дополнительной информацией, в них рисую так же.
Часть функционала - перетаскивание, редактирование содержания и масштабирование информационных панелей напрямую.
С большим трудом в 7ке сделал, чтоб всё работало плавно и удобно.
Перешел на 10ку (ибо приложение надо 64битное) и при срабатывании события Paint (которое Override ) панель в самом начале кода события(до выполнения чего бы то ни было) закрашивается в базовый (выбранный цвет), из-за чего происходит раздражающее мерцание. На гифке это не так заметно, пропускает кадры - в жизни прям дико мигает.

Масштабирую через perform, который, периодически и вызывает то самое событие paint, но через раз, иногда может просто закрасить в серый не вызвав событие (потому пока дополнительно вызываю repaint);
код масштабирования и перетаскивания
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
procedure TLegendPanel.MouseDown(Sender:TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
begin
  try
   if  ChangeOnOff then
   Begin

    ReleaseCapture;
     if ( X < Width - 10 )  and ( X >  10 ) and ( Y > 10 ) and ( Y < Height - 10 )  then
        Begin
         perform(WM_SysCommand, $F012, 0);
          Move:=true;
        end else
        Begin
         if ( X > Width - 10 ) and ( Y < Height - 10 ) and ( Y > 10 ) then   perform(WM_SysCommand, $F002, 0); // right

         if ( X < 10 ) and ( Y < Height - 10 ) and ( Y > 10 ) then perform(WM_SysCommand, $F001, 0);// left

         if ( X > 10 ) and ( X < Width - 10 ) and ( Y > Height - 10 ) then  perform(WM_SysCommand, $F006, 0); // bottom

         if ( X > 10 ) and ( X < Width - 10 ) and ( Y < 10 ) then  perform(WM_SysCommand, $F003, 0);// top

         if ( X < 10 ) and ( Y < 10 ) then perform(WM_SysCommand, $F004, 0);// top left

         if  ( X > Width - 10 ) and ( Y > Height - 10 )  then  perform(WM_SysCommand, $F008, 0);//Bottom right

         if ( X < 10 )  and ( Y > Height - 10 )  then perform(WM_SysCommand, $F007, 0);// Bottom left

         if  ( X > Width - 10 ) and ( Y < 10 ) then perform(WM_SysCommand, $F005, 0); //top right

        end;
   end;
     move:=false;

    relTop:=Top/parent.Height;
    relLeft:=Left/parent.Width;
    relHeight:=Height/parent.Height;
    relWidth:= Width/parent.Width;

    RePaint;

    DoMoveLegend;

      Xn:=X;
      Yn:=Y;
  except

  end;
end;

мигает


С "главной" панелью (которая тоже мерцала) часть проблем решил через override Repaint с кодом InvalidateRect( Handle, NIL, FALSE ) ; и вызов обновления картинки только через Repaint;
Так же главная панель так же окрашивалась в серый - если один из дочерних компонентов менял родителя (у меня при каждой отрисовке сбрасывались родители, а потом назначались в зависимости от того, что рисуется). Решил убрав такое присвоение, но логики всё равно не понял, почему перед Pаint именно в этом случае панель закрашивалась в серый, а без присвоения наследников - не окрашивалась, а нормально перерисовывалась.

Главный вопрос:
Почему панель закрашивается в серый до Override paint, как это отключить? (И почему на 7ке его не было, и, кстати, если использовать res 7ки, но компилировав в 10 - не мерцает).


просто мыслиА вообще я малость замучился рисовать всё через Paint - так как там тотальное перекрёстное вызывание этих событий у всех дочерних и родительских компонентов.
Меняешь что-то на "дочерней" панели, она вызывает Paint основной, та вызывает Paint всех дочерних, в том числе и той, которая вызвала обновление, а если там что-то завязано на текущее состояние...
Любая неосторожная строчка кода сразу вызывает СтакОверфлоу или зацикленное мигание.
А уж Resize - это вообще отдельная песня, так как у меня дочерние панели масштабируются пропорционально основной, сделать так, что бы все Paint-ы не вызывались по 100+ раз при каждой итерации изменения размеров - прям отдельная головная боль.
В общем на будущее буду искать иные пути рисования, либо надо как-то очень хорошо всё продумывать.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918354
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

Мерцание панели может быть связано со свойством ParentBackground. Установи его в False. Если не поможет, попробуй обрабатывать сообщение WM_ERASEBKGND, устанавливая результат обработки AMessage.Result := 1;
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918360
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич,

Код: pascal
1.
2.
3.
4.
А вообще я малость замучился рисовать всё через Paint - так как там тотальное перекрёстное вызывание этих событий у всех дочерних и родительских компонентов.
Меняешь что-то на "дочерней" панели, она вызывает Paint основной, та вызывает Paint всех дочерних, в том числе и той, которая вызвала обновление, а если там что-то завязано на текущее состояние...
Любая неосторожная строчка кода сразу вызывает СтакОверфлоу или зацикленное мигание.
...


Так ведь вам предлагали не использовать множество панелей, а рисовать всё на одном канвасе, например PaintBox'а. Я так понимаю, что у вас было уже что-то готовое на панелях, потому вы не стали радикально переделывать. Но ваш вариант содержит в себе просто море ненужного обременения - все эти окна (TPanel это ведь наследник от TWinControl) ну и вообще весь ненужный в вашем случае код элементов управления. Уже писали, в том числе люди с наверное гораздо большим опытом в этой области, чем у меня, я тоже писал - вам можно было сделать процедурные или объектные обертки для рисования элементов картинки и всё рисовать на PaintBox (точнее - рисовать на невидимом TBitmap, а потом копировать его на PaintBox). И никаких панелек.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918364
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
s62,
только была бы задача обработки кликов и перетаскивания элементов картинки. Но мне кажется, что она тоже вполне решаемая.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918383
Kazantsev Alexey
Андрей Игоревич,

Мерцание панели может быть связано со свойством ParentBackground. Установи его в False. Если не поможет, попробуй обрабатывать сообщение WM_ERASEBKGND, устанавливая результат обработки AMessage.Result := 1;


Очень интересно. ParentBackground:=false; при перетаскивании ( (perform(WM_SysCommand, $F012, 0) ) теперь ничего не мерцает, прям совсем, а вот при изменении размеров perform(WM_SysCommand, $F002+, 0); , мерцает, но как-то совем иначе, буду разбираться.

А вот перехват обработку сообщений я пока до конца не освоил, это через так делать?
Код: pascal
1.
2.
3.
4.
5.
6.
Application.OnMessage:=AppMessage;

procedure TForm.AppMessage(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message=WM_ERASEBKGND then ...;
end;



s62

Так ведь вам предлагали не использовать множество панелей, а рисовать всё на одном канвасе, например PaintBox'а. Я так понимаю, что у вас было уже что-то готовое на панелях, потому вы не стали радикально переделывать. Но ваш вариант содержит в себе просто море ненужного обременения - все эти окна (TPanel это ведь наследник от TWinControl) ну и вообще весь ненужный в вашем случае код элементов управления. Уже писали, в том числе люди с наверное гораздо большим опытом в этой области, чем у меня, я тоже писал - вам можно было сделать процедурные или объектные обертки для рисования элементов картинки и всё рисовать на PaintBox (точнее - рисовать на невидимом TBitmap, а потом копировать его на PaintBox). И никаких панелек.


Все многоугольники рисуются именно через свои компоненты, даже не PintBox, а через TComponent, где я уже сам свои Paint и прочие вещи писал. Панели используются именно для "Легенды", так как нагромождать всё через основной канвас ну очень сильно загромождает код (у меня там куча всяких событий и действий на всё привязано, один перехват мышки в едином канвасе будет просто огромным).
Изначально и легенду тоже рисовал на канвасе, но в итоге это оказалось ну очень неудобно, что решил через панели, тем более их тут не более 10 всё-таки.

s62
s62,
только была бы задача обработки кликов и перетаскивания элементов картинки. Но мне кажется, что она тоже вполне решаемая.

Всё это решено в полной мере, вплоть да кликов по тексту, Хинтам и прочим. Просто именно легенду так выводить неудобно.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918386
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;
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918390
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Все многоугольники рисуются именно через свои компоненты, даже не PintBox, а через TComponent, где я уже сам свои Paint и прочие вещи писал. Панели используются именно для "Легенды", так как нагромождать всё через основной канвас ну очень сильно загромождает код (у меня там куча всяких событий и действий на всё привязано, один перехват мышки в едином канвасе будет просто огромным).
Изначально и легенду тоже рисовал на канвасе, но в итоге это оказалось ну очень неудобно, что решил через панели, тем более их тут не более 10 всё-таки.
Понятно. Из общих соображений, может я и заблуждаюсь, мне кажется, что если разумно структурировать код - написать какие-то объекты, м.б. иерархию объектов для рисования многоугольников, написания легенды и т.д., то в конечном счете код мог бы быть не более громоздким, чем в текущем варианте. Т.е. так вы оперируете компонентами, потомками TComponent, а так бы оперировали своими объектами типа ТМногоугольник и т.д. (которые бы отрисовывались на общей большой канве и эта отрисовка была бы в коде объекта, так что при оперировании объектами это не было бы видно, как и в текущем случае).
Вот события мышки обрабатывать это да, нужно было бы наверное держать данные о всех графических объектах, чтобы по клику находить, над каким из них произошло событие.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918396
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;



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

Я не знаю, как у тебя там происходит рисование, но, если в Paint обновляется всё содержимое панели, то никаких артефактов отрисовки быть не должно. Даже перепроверил себя, накидал демку - ничего не мерцает.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918406
Kazantsev Alexey
Андрей Игоревич
Придется поразбираться :)

Я не знаю, как у тебя там происходит рисование, но, если в Paint обновляется всё содержимое панели, то никаких артефактов отрисовки быть не должно. Даже перепроверил себя, накидал демку - ничего не мерцает.

Тут скорее дело в perform(WM_SysCommand, $F00.., 0), оно вызывает paint не так уж и часто, а пока мышку не отпустишь - вызывать paint иначе не получиться.
Ладно, подумаю, поковыряюсь.

А как вы масштабируете панель размещенную на панели?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918413
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич
Тут скорее дело в perform(WM_SysCommand, $F00.., 0), оно вызывает paint не так уж и часто

Можно принудительно вызывать отрисовку из того-же WMEraseBkgnd.

Андрей Игоревич
А как вы масштабируете панель размещенную на панели?

В OnMouseMove пересчитываю размер.
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918422
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Игоревич

Главный вопрос:
Почему панель закрашивается в серый до Override paint, как это отключить?

Всё есть в исходниках
Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
procedure TCustomPanel.Paint;
const
  Alignments: array[TAlignment] of Longint = (DT_LEFT, DT_RIGHT, DT_CENTER);
  VerticalAlignments: array[TVerticalAlignment] of Longint = (DT_TOP, DT_BOTTOM, DT_VCENTER);
var
  Rect: TRect;
  LColor: TColor;
  LStyle: TCustomStyleServices;
  LDetails: TThemedElementDetails;
  TopColor, BottomColor: TColor;
  BaseColor, BaseTopColor, BaseBottomColor: TColor;
  //FontHeight: Integer;
  Flags: Longint;

begin
  Rect := GetClientRect;

  BaseColor := Color;
  BaseTopColor := clBtnHighlight;
  BaseBottomColor := clBtnShadow;
  LStyle := StyleServices;
  if LStyle.Enabled then
  begin
    LDetails := LStyle.GetElementDetails(tpPanelBackground);
    if LStyle.GetElementColor(LDetails, ecFillColor, LColor) and (LColor <> clNone) then
      BaseColor := LColor;
    LDetails := LStyle.GetElementDetails(tpPanelBevel);
    if LStyle.GetElementColor(LDetails, ecEdgeHighLightColor, LColor) and (LColor <> clNone) then
      BaseTopColor := LColor;
    if LStyle.GetElementColor(LDetails, ecEdgeShadowColor, LColor) and (LColor <> clNone) then
      BaseBottomColor := LColor;
  end;

  if BevelOuter <> bvNone then
  begin
    AdjustColors(BevelOuter);
    Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
  end;
  if not (LStyle.Enabled and (csParentBackground in ControlStyle)) then
    Frame3D(Canvas, Rect, BaseColor, BaseColor, BorderWidth)
  else
    InflateRect(Rect, -Integer(BorderWidth), -Integer(BorderWidth));
  if BevelInner <> bvNone then
  begin
    AdjustColors(BevelInner);
    Frame3D(Canvas, Rect, TopColor, BottomColor, BevelWidth);
  end;
  with Canvas do
  begin
    if not LStyle.Enabled or not ParentBackground then
    begin
      Brush.Color := BaseColor;
      FillRect(Rect);
    end;
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918423
Kazantsev Alexey

Андрей Игоревич
А как вы масштабируете панель размещенную на панели?

В OnMouseMove пересчитываю размер.

Изначально тоже так сделал, но очень мне не понравилось, уже и не помню почему, то ли мышка слетала с панели (если не успевала обновить размер) и OnMouseMove уже не срабатывал, то ли ещё что-то было.

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

У винконтролов есть возможность захватывать мышку, после чего все её события идут в этот контрол.

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

Не понял. Если взять .res файл от семёрки и подложить его в проект Delphi 10.3?
...
Рейтинг: 0 / 0
Создание компонента сложной формы (аккуратной контурной стрелки).
    #39918426
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Всё есть в исходниках

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


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