TButton z zmienionym sposobem wyswietlania

0

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.

0

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ę.

0

No wlasnie :)

Robilem male eksperymenty i chyba faktycznie najlepiej bedzie napisac jaki maly system GUI przeznaczony do renderowania...

0

//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.

0
Komorkowy_dzony napisał(a)

//Component by [KmH]AS-ELLITE ZIOMBER
//mail: [email protected]

a gdzie tu jest DX?????

1 użytkowników online, w tym zalogowanych: 0, gości: 1