Jak zrobic mutacje komponentu TButton ale tak aby zachowal on wszystkie swoje parametry poza metoda wyswietlania, mianowicie chce rysowac go na swoj wlasny sposob. Nie chodzi mi tutaj o ownerdrawa bo problem jest nieco powazniejszy, mianowicie chce renderowac ten button za pomoca DirectX'a. Pisze w PowerDraw juz bardzo dlugo i robienie GUI jest dosc meczace i wpadlem wlasnie na pomysl czy mozna jakos tak sworzyc odpowiedniki komponentow zamieniajac im tylko sposob graficznej reprezentacji.
Nie do końca kumam, ale może po prostu zrób sobie niewidzialnego buttona, obsłuz rysowanie czego ci się podoba, a na koniec podepnij rozpoznanie x y klikniecia myszą i jeśli trafi w wybrany obszar to uruchom kliknięcie buttona.
Gorzej pójdzie z innymi komponentami jak sądzę.
No wlasnie :)
Robilem male eksperymenty i chyba faktycznie najlepiej bedzie napisac jaki maly system GUI przeznaczony do renderowania...
//Component by [KmH]AS-ELLITE ZIOMBER
//mail: [email protected]
unit NoxxButtonColor;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TNoxxButtonColor = class(TComponent)
private
fbutton : TButton;
fbutton_color : Tcolor;
fcolor_3d_left, fcolor_3d_top, ffont_color : TColor;
fleft, ftop : integer;
fcleft, fctop : integer;
procedure setbutton(abutton : TButton);
procedure setbuttoncolor(value : Tcolor);
procedure set3dleftcolor(value : Tcolor);
procedure set3dtopcolor(value : Tcolor);
procedure setfontcolor(value : Tcolor);
procedure setfleft(value : integer);
procedure setftop(value : integer);
procedure setfcleft(value : integer);
procedure setfctop(value : integer);
protected
public
constructor Create(AOwner: TComponent); override;
procedure change_unclicked;
procedure change_clicked;
published
property Button : TButton read fbutton write setbutton;
property Button_color : TColor read fbutton_color write setbuttoncolor default clbtnface;
property Left_color : TColor read fcolor_3d_left write set3dleftcolor default clwhite;
property Top_color : TColor read fcolor_3d_top write set3dtopcolor default clblack;
// property Font_color : TColor read ffont_color write setfontcolor default clblack;
property Text_left_unchck : integer read fleft write setfleft default 10;
property Text_top_unchck : integer read ftop write setftop default 10;
property Text_left_chck : integer read fcleft write setfcleft default 10;
property Text_top_chck : integer read fctop write setfctop default 10;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Additional', [TNoxxButtonColor]);
end;
constructor Tnoxxbuttoncolor.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
fbutton := nil;
fbutton_color := clbtnface;
fcolor_3d_left := clwhite;
fcolor_3d_top := clblack;
ffont_color := clblack;
fleft := 10;
ftop := 10;
fcleft := 10;
fctop := 10;
end;
procedure Tnoxxbuttoncolor.setbutton(abutton : TButton);
begin
fbutton := abutton;
end;
procedure Tnoxxbuttoncolor.setbuttoncolor(value : Tcolor);
begin
fbutton_color := value;
end;
procedure Tnoxxbuttoncolor.set3dleftcolor(value : Tcolor);
begin
fcolor_3d_left := value;
end;
procedure Tnoxxbuttoncolor.set3dtopcolor(value : Tcolor);
begin
fcolor_3d_top := value;
end;
procedure Tnoxxbuttoncolor.setfontcolor(value : Tcolor);
begin
ffont_color := value;
end;
procedure Tnoxxbuttoncolor.setfleft(value : integer);
begin
fleft := value;
end;
procedure Tnoxxbuttoncolor.setftop(value : integer);
begin
ftop := value;
end;
procedure Tnoxxbuttoncolor.setfcleft(value : integer);
begin
fcleft := value;
end;
procedure Tnoxxbuttoncolor.setfctop(value : integer);
begin
fctop := value;
end;
procedure tnoxxbuttoncolor.change_unclicked;
var
c : Tcanvas;
capt : Tlabel;
begin
capt := TLabel.create(self);
capt.Parent := nil;
//to zmienia kolor buttona :]
c:=TCanvas.Create;
c.Handle:=GetDC(fbutton.Handle);
c.Brush.Style := bssolid;
c.Brush.Color := fbutton_color;
c.pen.Color := fbutton_color;
c.Rectangle(1,1,fbutton.width - 1,fbutton.height - 2);
c.MoveTo(0,0);
c.Pen.color := fcolor_3d_left;
c.lineto(fbutton.width,0);
c.MoveTo(0,0);
c.lineto(0,fbutton.height - 1);
c.pen.color := fcolor_3d_top;
c.moveto(0,fbutton.height+1);
c.lineto(fbutton.width-1,fbutton.height-1);
c.moveto(fbutton.width-1,fbutton.height-1); // <-- tak dla pewności
c.lineto(fbutton.width-1,1);
c.pen.color := clbtnshadow;
c.moveto(fbutton.width - 3,1);
c.lineto(fbutton.width - 3,fbutton.height - 3);
c.moveto(fbutton.width - 3,fbutton.height - 3); //-||-
c.lineto(2,fbutton.height - 3);
//ale gdzie jest caption? - to już za chwile :]
capt.font := fbutton.Font;
capt.Font.Color := ffont_color;
capt.Caption := fbutton.caption; {
c.brush.Color := ffont_color;
c.Brush.Style := bsclear; }
c.TextOut(fleft,ftop,fbutton.caption);
capt.free;
c.free;
end;
procedure tnoxxbuttoncolor.change_clicked;
var
c : Tcanvas;
capt : Tlabel;
begin
capt := TLabel.create(self);
capt.Parent := nil;
//to zmienia kolor buttona :]
c:=TCanvas.Create;
c.Handle:=GetDC(fbutton.Handle);
c.Brush.Style := bssolid;
c.Brush.Color := fcolor_3d_top;
c.pen.Color := fcolor_3d_top;
c.Rectangle(0,0,fbutton.width,fbutton.height);
c.Brush.Color := clbtnshadow;
c.pen.Color := clbtnshadow;
c.Rectangle(1,1,fbutton.width -1,fbutton.height - 1);
c.Brush.Color := fbutton_color;
c.pen.Color := fbutton_color;
c.Rectangle(2,2,fbutton.width - 2,fbutton.height - 2);
capt.font := fbutton.Font;
capt.Font.Color := ffont_color;
capt.Caption := fbutton.caption;{
c.brush.Color := ffont_color;
c.Brush.Style := bsclear; }
c.TextOut(fcleft,fctop,fbutton.caption);
capt.free;
c.free;
end;
end.
Komorkowy_dzony napisał(a)
//Component by [KmH]AS-ELLITE ZIOMBER
//mail: [email protected]
a gdzie tu jest DX?????