У меня есть процедура из которой можно слепить компонент ScrolBar. Но т.к я не силен в компонентостроении у меня не получается переделать процедуру. Вот что у меня получилось:
| Код | unit EScrol;
interface
uses System.SysUtils, System.Classes, Vcl.Controls,ExtCtrls,Dialogs,StdCtrls, Forms,Windows,Messages,Graphics,Variants,Controls;
type TEscrol = class(TCustomControl) private FScrol: TImage; FMaxpos: Integer; FMinpos: Integer; FPos: Integer; procedure SetMaxpos(Value: Integer); procedure SetMinpos(Value: Integer); procedure SetPos(Value: Integer); procedure scrolMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Draw; protected
public procedure Paint; override; constructor Create(AOWner: TComponent); override; published property onMouseDown; property Maxpos: Integer read FMaxpos write SetMaxpos; property Minpos: Integer read FMinpos write SetMinpos; property Pos: Integer read FPos write SetPos; end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('EComp', [TEscrol]); end; procedure TEscrol.SetMaxpos(Value: Integer); begin if Value <0 then Value:= 100; FMaxpos:= Value; end; procedure TEscrol.SetMinpos(Value: Integer); begin if Value <0 then Value:= 0; FMinpos:= Value; end; procedure TEscrol.Setpos(Value: Integer); begin if Value <0 then Value:= 0; FPos:= Value; end; constructor TEscrol.Create(AOWner: TComponent); begin inherited; FMaxPos:= 100; FMinPos:= 0; Parent.DoubleBuffered:= True; FPos:= 0; end; procedure TEscrol.Draw; begin // Фон Canvas.Pen.Color := RGB(81,81,81); // этот цвет должен выбираться в свойствах(не RGB,потому что RGB нельзя указывать через свойства,вроде бы) Canvas.Brush.Color := RGB(81,81,81); //это тот же цвет Canvas.Rectangle(0, 0, Width, Height); // Позиция Canvas.Pen.Color := clBlue; //этот цвет тоже должен выбираться в свойствах Canvas.Brush.Color := clBlue; // тот же цвет Canvas.Rectangle(0, 0, Pos, Height); end; procedure scrolMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Pos:=X; TEscrol.Draw; end; end.
|
А свою процедуру я прикрепил в архиве. Собственно что я хочу сделать и что не получается:- В свойствах добавить пункты MaxPos,MinPos,Pos(вроде бы получилось)
- При создании задать начальные параметры переменным MaxPos,MinPos,Pos (тоже вроде получилось)
- Добавить пункт в свойствах colors,fontcolors - там можно выбрать цвет выделения и заднего фона scrol'а (не получается,даже со стандартными цветами)
- MaxPos и MinPos взять как границы -начало, предел (не получилось,нужно MaxPos брать как 100% Scrol.Widht , что собственно затруднительно)
- Добавить событие нажатие на scrol (не получилось,почему то rad ругает)
- Самое главное забыл,охота узнать,как для MaxPos,MinPos,Pos,Colors добавить параметры,то есть что бы можно было через код программы задавать им значения(Scrol1.maxpos := 200 например),а для colors,fontcolors задавать цвета RGB (colors:= RGB(81,81,81) например)
В общем у меня не получается переделать процедуру,а там всего лишь надо заменить готовые данные на данные которые можно выбрать в свойствах... Помогите советом,как можно все это реализовать |