Форум: "Потрепаться";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Внизможет кто-нить сталкивался и лечил такой косяк: Найти похожие ветки
← →
vecna © (2005-10-18 16:39) [0]в дельфи (в 6й например) в design-time
1. кладем на форму TScrollBox
2. накидываем туда контролов так, чтоб появился скроллер
3. устанавливаем ему BevelKind отличный от bkNone
теперь, если потыркать мышкой по контролам внутри TScrollBox"а не отрисовываются скроллер.
← →
Johnmen © (2005-10-18 17:35) [1]Это косяк Борланда для WinControl"ов.
Надо подправить Controls.pas
← →
vecna © (2005-10-18 18:32) [2]Ясно, значит никто не заморочивался.... тогда я тоже не буду =)
← →
Johnmen © (2005-10-18 18:33) [3]Да, никто не заморачивался. Просто подправил Controls.pas.
← →
vecna © (2005-10-19 10:10) [4]2Johnmen
> Просто подправил Controls.pas.
ну дык расскажи что ты там правил =)
← →
Johnmen © (2005-10-19 10:51) [5]Вот таким образом, с сохранением авторства. Автор Sha ©. Переписан WMNCPaint.
//Sha:
//Мы по примеру Borland"а рисуем скаты Bevel"а для TWinControl"а всегда толщиной
//в одну линию, причем Border рисуем не между скатами Bevel"а, а между Bevel"ом
//и клиентской областью. Почему так - загадка. В глаза это не бросается, т.к.
//обычно BevelWidth=1, BorderWidth=0 и почти всегда BevelWidth<=1, BorderWidth<=1.
//Конечно, это можно подправить и рисовать TWinControl аналогично TCustomPanel.
procedure TWinControl.WMNCPaint(var Message: TMessage);
const
InnerStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENINNER, BDR_RAISEDINNER, 0);
OuterStyles: array[TBevelCut] of Integer = (0, BDR_SUNKENOUTER, BDR_RAISEDOUTER, 0);
EdgeStyles: array[TBevelKind] of Integer = (0, 0, BF_SOFT, BF_FLAT);
Ctl3DStyles: array[Boolean] of Integer = (BF_MONO, 0);
var
DC: HDC;
RC, RW: TRect;
EdgeSize, xScroll, yScroll: Integer;
WinStyle: Longint;
SaveColor: TColor;
begin
inherited;
{ Get window DC that is clipped to the non-client area }
if (BevelKind <> bkNone) or (BorderWidth > 0) then
begin
DC := GetWindowDC(Handle);
SaveColor := Brush.Color; Brush.Color := clBtnFace;
try
Windows.GetClientRect(Handle, RC);
GetWindowRect(Handle, RW);
MapWindowPoints(0, Handle, RW, 2);
OffsetRect(RC, -RW.Left, -RW.Top);
{ Draw borders in non-client area }
InflateRect(RC, BorderWidth, BorderWidth);
EdgeSize := 0; xScroll := 0; yScroll := 0;
if BevelKind <> bkNone then
begin
if BevelInner <> bvNone then Inc(EdgeSize, BevelWidth);
if BevelOuter <> bvNone then Inc(EdgeSize, BevelWidth);
if beLeft in BevelEdges then Dec(RC.Left, EdgeSize);
if beTop in BevelEdges then Dec(RC.Top, EdgeSize);
if beRight in BevelEdges then Inc(RC.Right, EdgeSize);
if beBottom in BevelEdges then Inc(RC.Bottom, EdgeSize);
end;
WinStyle := GetWindowLong(Handle, GWL_STYLE);
if (WinStyle and WS_VSCROLL) <> 0 then xScroll:=GetSystemMetrics(SM_CXVSCROLL);
if (WinStyle and WS_HSCROLL) <> 0 then yScroll:=GetSystemMetrics(SM_CYHSCROLL);
Inc(EdgeSize,BorderWidth);
Inc(RC.Right, xScroll);
Inc(RC.Bottom, yScroll);
if (BevelKind <> bkNone) and (BevelWidth > 1) or (BorderWidth > 0) then
begin
RW := RC; RW.Right := RW.Left + EdgeSize; Windows.FillRect(DC, RW, Brush.Handle);
RW.Right := RC.Right; RW.Left := RW.Right - EdgeSize; Windows.FillRect(DC, RW, Brush.Handle);
RW.Left := RC.Left; RW.Bottom := RW.Top + EdgeSize; Windows.FillRect(DC, RW, Brush.Handle);
RW.Bottom := RC.Bottom; RW.Top := RW.Bottom - EdgeSize; Windows.FillRect(DC, RW, Brush.Handle);
end;
if (xScroll <> 0) and (yScroll <> 0) then
begin
RW.Bottom := RC.Bottom - EdgeSize; RW.Top := RW.Bottom - yScroll;
RW.Right := RC.Right - EdgeSize; RW.Left := RW.Right - xScroll;
Windows.FillRect(DC, RW, Brush.Handle);
end;
if BevelKind <> bkNone then
begin
DrawEdge(DC, RC, InnerStyles[BevelInner] or OuterStyles[BevelOuter],
Byte(BevelEdges) or EdgeStyles[BevelKind] or Ctl3DStyles[Ctl3D] or BF_ADJUST);
end;
finally
ReleaseDC(Handle, DC);
Brush.Color := SaveColor;
end;
end;
end;
← →
vecna © (2005-10-19 11:10) [6]окей, спасибо
← →
vecna © (2005-10-19 11:25) [7]вот блин! Этот "волшебный" скроллбокс еще неправильно выравнивает контролы.... в дизайн-тайме рисуешь одно, в ран-тайме видишь совершенно другое? Этож издевательство какое-то! =)
← →
Sandman29 (2005-10-19 11:31) [8]Попробуйте избавиться от скроллирования. Табконтролы могут помочь, например.
← →
vecna © (2005-10-19 11:39) [9]2 Sandman29
> Попробуйте избавиться от скроллирования. Табконтролы могут помочь, например.
Я бы с удовольствием, но к сожалению не могу...
← →
Sandman29 (2005-10-19 11:45) [10]vecna © (19.10.05 11:39) [9]
Техпроект не позволяет?
Скроллирование очнеь неудобно для пользователя, если только это не скроллирование грида.
← →
vecna © (2005-10-19 11:51) [11]не позволяет... =(
← →
Sandman29 (2005-10-19 12:04) [12]Понятно. Тогда могу предложить разместить в скроллбоксе 2-3 панели, на которые уже кидать кнопки и прочее, чтобы избавиться от глюков размещения.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.055 c