Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
2-1129392436
Nicolas1989
2005-10-15 20:07
2005.11.06
Работа с COM портом


14-1129586916
Prohodil Mimo
2005-10-18 02:08
2005.11.06
TComboBox.Style = csOwnerDrawFixed, почему он не редактируемый?


14-1129364222
Progamer
2005-10-15 12:17
2005.11.06
юсб шнур для цифровиков


1-1129296155
Sysanin
2005-10-14 17:22
2005.11.06
Проигрывание звука из DLL


6-1122031924
Profik
2005-07-22 15:32
2005.11.06
ClientSocket





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский