|
|
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Никогда раньше не использовал этот компонент TCategoryPanelGroup, тут в одном проекте для экономии экранного места решил использовать. На дочерних CategoryPanel размещены другие панели, StringGrid-ы и т.д. в некоторых ситуациях компоненты размещенные на CategoryPanel не прорисовываются совсем или прорисовываются частично. Может кто сталкивался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 12:49 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
DoubleBuffered := False? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 13:29 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Это сразу проверил везде DoubleBuffered := true; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 15:33 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
iStrannikЭто сразу проверил везде DoubleBuffered := true;Выставь false на форме, содержащей TCategoryPanelGroup. Помогло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2016, 15:35 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Пробовал тоже не помогает. Я забыл указать что я использую в проекте стиль из стандартного набора, но глюк и без него тоже есть. Вчера 2 часа бился, создал чистый проект кинул на форму TCategoryPanelGroup, создал 2 штуки CategoryPanel1 и CategoryPanel2. Затем кинул на вторую CategoryPanel2(которая под CategoryPanel1) Panel, а на нее TCheckBox. Компилируем, запускаем, пытаемся свернуть и развернуть верхнюю CategoryPanel1, при этом видим что на CheckBox пропадает. Еще поймал такой глюк CheckBox размещенный непосредственно в CategoryPanel, прорисовывается нормально при сворачивании верхней CategoryPanel, но задний фон CheckBox задний фон XheckBox не отрисовывается в цвет стиля, а остается серым. Этот же CheckBox размещенный на форме отображается нормально. Проект тестировался в XE5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 19:52 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Глюк 1 - см. вложение ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 19:57 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Глюк 2 - см. вложение Видно что свернули верхнюю CategoryPanel, и видно что на нижней CategoryPanel4 -> Panel2 --> пропал CheckBox4 Если к нему поднести курсор он прорисовывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 19:59 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Я уже не помню деталей, но у меня на обычных панелях при большом уровне вложенности (> 7) проявлялись артефакты при перерисовке. Может и здесь ноги растут оттуда же? Попробуйте уменьшить количество вложенных окон ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2016, 20:28 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Да тут вложений то и нет. А как избавиться от серого фона для СheckBox расположенного на CategoryPanel, при использования стиля. Пробовал перехватывать WMPAINT но он работает только без использования стиля, когда же включен стиль то отрисовка идет как то подругому и уже не перехватывается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.02.2016, 15:40 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
iStrannikДа тут вложений то и нет. iStrannikЗатем кинул на вторую CategoryPanel2(которая под CategoryPanel1) Panel, а на нее TCheckBox.Я один вижу здесь 4-уровневую вложенность окон? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 18:14 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
А как же но у меня на обычных панелях при большом уровне вложенности (> 7) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 19:16 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
iStrannikА как жеЯ не знаю, что такое CategoryPanel и как она реализована. Я Вам указал одно из вероятных проблемных мест. Смотреть этот момент или нет - решать Вам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2016, 19:55 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
я тоже пытался использовать этот компонент и тоже криво отрисовывается при потере фокуса никак не победил(( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 10:28 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
В D10 Seattle не воспроизводится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 11:10 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Cobalt747, а вот если выставить DoubleBuffered := true, тогда есть баги (вообще не отрисовываются компоненты) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.02.2016, 11:12 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Проверил тоже на Seatle, специально поставил ее, собрал тестовый проект глюки появляются только если у формы DoubleBuffer = true; Попробовал этот проект подсунуть XE5 сразу вылазит глюк с прорисовкой и фон CheckBox серый при использовании стиля, значит в какой то версии после XE5 что то допилили. Может кто знает есть какие то аналоги TCategoryPanel, не такие кривые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2016, 21:29 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Вылечил отрисовку (не прорисовывались докнутые формы на этих панелях). Также снизил интенсивность мерцания при изменении размеров формы. Delphi 10.2 Tokyo 1. Реализовал helper для TCategoryPanel, который достает прозрачную панель, на которой рисуются брошенные на панель компоненты. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 2. Хакнул эту прозрачную панель TCategoryPanelSurface и переписал ее WMEraseBkgnd Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 3. Написал процедуру осуществляющую накат хака Код: pascal 1. 2. 3. 4. 5. 6. 7. 4. Далее в FormCreate или FormShow остается пройтись по всем CategoryPanel и пофиксить их свойства Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Результатом доволен. Полный код тут, но там есть специфичные вещи для моих задач. unit _ClassCategoryPatch; interface Uses Windows, Classes, SysUtils, Forms, Controls, ExtCtrls, _ClassIObject, messages; Type TCategoryPanelPatch = class (IObject) Strict Private FForm: TCustomForm; FLastCategoryPanel: TCategoryPanel; FCategoryPanelCount: Integer; procedure OnCollapse(Sender: TObject); procedure UpdateLastCategoryPanel(); procedure UpdateCategoryPanel (panel : TCategoryPanel); procedure UpdateCategoryPanelGroup(group: TCategoryPanelGroup); Public Constructor Create(Form: TCustomForm); Reintroduce; Procedure Attach; End; TCategoryPanelSurfaceFix = class (ExtCtrls.TCategoryPanelSurface) protected procedure WMEraseBkgnd(var Message: TWmEraseBkgnd); message WM_ERASEBKGND; end; THackCP = class helper for TCategoryPanel private function GetSurface: ExtCtrls.TCategoryPanelSurface; public Property Surface: ExtCtrls.TCategoryPanelSurface read GetSurface; end; procedure PatchCategoryPanelSurface(surface: TCategoryPanelSurface); implementation uses Graphics, cxPC; { TCategoryPanelPatch } constructor TCategoryPanelPatch.Create(Form: TCustomForm); begin inherited Create(); FForm := Form; Attach(); end; procedure TCategoryPanelPatch.OnCollapse(Sender: TObject); begin TCategoryPanel(Sender).Expand() end; procedure TCategoryPanelPatch.UpdateCategoryPanel(panel: TCategoryPanel); begin panel.ParentBackground := True; panel.DoubleBuffered := True; panel.Surface.DoubleBuffered := True; panel.Surface.ParentDoubleBuffered := true; PatchCategoryPanelSurface(panel.Surface); end; procedure TCategoryPanelPatch.UpdateCategoryPanelGroup( group: TCategoryPanelGroup); begin // group.GradientBaseColor := $00FF8306; // group.GradientColor := $00FF8306; group.HeaderFont.Style := [TFontStyle.fsBold]; group.HeaderFont.Size := 8; // group.HeaderFont.Color := clWhite; //group.DoubleBuffered := True; end; procedure TCategoryPanelPatch.UpdateLastCategoryPanel; begin if FCategoryPanelCount = 1 then begin FLastCategoryPanel.Align := alClient; FLastCategoryPanel.OnCollapse := OnCollapse; end; end; procedure TCategoryPanelPatch.Attach; var index: integer; begin FLastCategoryPanel := nil; FCategoryPanelCount:= 0; for Index:=0 to FForm.ComponentCOunt - 1 do begin if FForm.Components[index] is TCategoryPanel then begin if FCategoryPanelCount < 1 then FLastCategoryPanel := FForm.Components[index] as TCategoryPanel; Inc(FCategoryPanelCount); UpdateCategoryPanel(FForm.Components[index] as TCategoryPanel); end; if FForm.Components[index] is TCategoryPanelGroup then UpdateCategoryPanelGroup(FForm.Components[index] as TCategoryPanelGroup); if FForm.Components[index] is TcxPageControl then begin TcxPageControl(FForm.Components[index]).LookAndFeel.NativeStyle := True; TcxPageControl(FForm.Components[index]).LookAndFeel.SkinName := 'Office11'; TcxPageControl(FForm.Components[index]).DoubleBuffered := True; end; end; UpdateLastCategoryPanel; end; { THackCP } function THackCP.GetSurface: ExtCtrls.TCategoryPanelSurface; begin Result := Self.FPanelSurface; end; { TCategoryPanelSurfaceFix } procedure TCategoryPanelSurfaceFix.WMEraseBkgnd(var Message: TWmEraseBkgnd); begin if not FDoubleBuffered or (TMessage(Message).wParam = WPARAM(TMessage(Message).lParam)) then FillRect(Message.DC, ClientRect, NULL_BRUSH); Message.Result := 1; end; procedure PatchCategoryPanelSurface(surface: TCategoryPanelSurface); type pClass = ^TClass; begin if surface.ClassType = TCategoryPanelSurface then pClass(surface)^ := TCategoryPanelSurfaceFix; end; end. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2020, 20:19 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Mixrud, А вот если бы ты со всем этим тикет на QC запилил, чтобы в консерватории, для всех, тоже поправили, то был бы, имхо, совсем молодец. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2020, 12:53 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Vlad F Думаю что мое решение половинчатое. Оно будет работать только тогда, когда не используются стили (хотя не тестировал в таком режиме). Отправлю в пятницу следующую в прод на крупный корпоративный проект. Хотя бы теперь все выглядит на этих панелях не так убого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2020, 13:50 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Mixrud, вы используете апдейты/модули "от Энди"? В одном из модулей был кумулятивный набор, решаюший похожие проблемы. Например, глюки отрисовки при ресайзе вложенных окон. Причина: для 32 битных приложений, в Win7-64, был уменьшен стек обработки оконных сообщений. Решение - в модуле. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2020, 14:54 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Нет не использую. У CategoryPanel даже без использования themes есть проблемы с отрисовкой обычных компонентов, например tcxcheckbox или tcxtextedit. Не только Dock Form. Dock Form докаю в TPanel, расположенный в TGridPanel. Эти GridPanel вписываются также в другие GridPanel и могут располагаться на TForm, TScrollbox или TCxTabSheet. И лишь на TCategoryPanel есть проблемы с отрисовкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2020, 15:34 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Mixrud Vlad F Думаю что мое решение половинчатое. Оно будет работать только тогда, когда не используются стили (хотя не тестировал в таком режиме). Считаю, что надо зарегистрировать, а дальше это будут уже их проблемы (проверка на вшивость). Делай что должно, и будь что будет. (с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2020, 22:45 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
После тщательного тестирования, пришлось изменить код. Добавлен перехват WMPaint Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Добавлен helper для WinControl Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2020, 11:17 |
|
||
|
TCategoryPanelGroup беда с отрисовкой.
|
|||
|---|---|---|---|
|
#18+
Борьба продолжается. Немного поправил хэлпер Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Тестирование из под Citrix вроде прошло нормально. В пятницу на бой. На следующей неделе отпишу по результатам боевой эксплуатации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2020, 00:58 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39172022&tid=2037954]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 428ms |

| 0 / 0 |
