![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как закрасить в какой то свет вертикальную полосу прокрутки?
Марина © (2006-06-25 10:42:00)Как закрасить в какой то цвет вертикальную полосу прокрутки у StringGrid ??
Noname27 (2006-06-26 15:45:00) [1]Удалено модератором
Примечание: Offtopic
Пусик (2006-06-26 11:41:00) [2]> А зачем?
"Хороший понт дороже денег"
Gero (2006-06-26 11:21:00) [3]> Как закрасить в какой то цвет вертикальную полосу прокрутки
> у StringGrid ??
А зачем?
Шпиён (2006-06-26 11:16:00) [4]> aral3@zin.ru (26.06.06 10:15) [14]
В статье не учтена одна маленькая подробность - сообщение WM_CTLCOLORSCROLLBAR используется только дочерними скроллбарами, поэтому решение применимо не "на все случаи жизни".
> The WM_CTLCOLORSCROLLBAR message is used only by child scrollbar
> controls. Scrollbars attached to a window (WS_SCROLL and
> WS_VSCROLL) do not generate this message.To customize the
> appearance of scrollbars attached to a window, use the flat
> scroll bar functions
(2006-06-26 11:10:00) [5]Удалено модератором
aral3@zin.ru (2006-06-26 10:15:00) [6]Читаем эту статью:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=1032
Шпиён (2006-06-26 04:14:00) [7]Кстати, для формы все делается намного проще, требуется только
uses ...... CommCtrl;
............
procedure TForm1.FormCreate(Sender: TObject);
begin
InitializeFlatSB(Handle);
.........
Все остальное можно настраиваеть в инспекторе объектов -)
Шпиён (2006-06-26 03:57:00) [8]Набросок кода (драфт):
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, CommCtrl, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
pos:integer;
WProc:Pointer;
function NewWndProc(Handle:hWND; Msg,wParam,LParam:LongInt):LongInt;stdcall;
implementation
{$R *.dfm}
function NewWndProc(Handle:hWND; Msg,wParam,LParam:LOngInt):LongInt;
begin
if Msg=WM_VSCROLL then
begin
if (LoWord(WParam)=SB_THUMBPOSITION) then
Pos:=HiWord(WParam);
if LoWord(WParam)=SB_ENDSCROLL then
FlatSB_SetScrollPos(Handle, SB_VERT,Pos,True);
end;
Result:=CallWindowProc(WProc,Handle,Msg,wParam,lParam);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
begin
ScrollBars:=ssNone;
InitializeFlatSB(Handle);
FlatSB_EnableScrollBar(Handle,SB_VERT,ESB_ENABLE_BOTH);
FlatSB_SetScrollRange(Handle,SB_VERT,0,100,False);
FlatSB_SetScrollProp(Handle,WSB_PROP_VSTYLE,FSB_REGULAR_MODE,False);
FlatSB_SetScrollProp(Handle,WSB_PROP_VBKGCOLOR,clGreen,False);
FlatSB_ShowScrollBar(Handle,SB_VERT,True);
WProc:=Pointer(SetWindowLong(Handle,GWL_WNDPROC,Integer(@NewWndProc)));
end;
end;
Поправки и новые идеи приветствуются -)
Реакцию на прокрутку колесиком мыши и прочие тонкости не делал и (в данном примере) не буду.
Шпиён (2006-06-26 00:54:00) [9]Закрасить Background можно. (но не "бегунок" и кнопки прокрутки)
Тут есть два варианта.
1) использовать FlatScrollBar
(uses ...FlatSB, CommCtrl;)
Копать в сторону MSDN: Flat Scroll Bars
2)
Отключить ScrollBar, "прикрутить" к StringGrid ChildScrollBar, перехватывать и обрабатывать сообщение WM_CTLCOLORSCROLLBAR.
За подробностями - опять же в MSDN: WM_CTLCOLORSCROLLBAR
The WM_CTLCOLORSCROLLBAR message is used only by child scrollbar controls. Scrollbars attached to a window (WS_SCROLL and WS_VSCROLL) do not generate this message. To customize the appearance of scrollbars attached to a window, use the flat scroll bar functions
Шпиён (2006-06-25 22:58:00) [10]
> sniknik © (25.06.06 22:50) [8]
"Нормальные герои всегда идут в обход" (с)
А если серьезно, вопрос не такой уж простой... IMHO
Пусик (2006-06-25 22:57:00) [11]> решение: поставь цветовую схему в виндах с нужным цветом
> в полоске прокрутки...
Это да. Но вряд ли автору подойдет.
Скорее всего, решение весьма сложно для реализации, ин овичку с ним не справиться.
sniknik (2006-06-25 22:50:00) [12]> Кто-то из вас может в течение 5 минут найти решение?
только увидел...
решение: поставь цветовую схему в виндах с нужным цветом в полоске прокрутки... настройка системная, поменяется везде, и в StringGrid тоже.
Noname27 (2006-06-25 22:41:00) [13]У меня имеется только одна идея: написать наследника и перехватывать сообщение WM_Paint. Стандарт :)
Пусик (2006-06-25 22:40:00) [14]Кто-то из вас может в течение 5 минут найти решение?
Пусик (2006-06-25 22:38:00) [15]Кто-то из вас может в течение 5 минут найти решение?
Ketmar (2006-06-25 21:11:00) [16]кисточкой.
Марина (2006-06-25 20:40:00) [17]Прикольно помогли.. уже в который раз. Тока не в тему писать умеете....
Ясно, спасибо блин.
мастера...
PZ (2006-06-25 11:04:00) [18]казнить нельзя помиловать
Марина (2006-06-25 10:42:00) [19]цвет то есть* ))