Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как закрасить в какой то свет вертикальную полосу прокрутки?


Марина ©   (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]

цвет то есть* ))


Наверх

Титульная страница Поиск, карта сайта Написать письмо