Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   skins (https://www.clubdelphi.com/foros/showthread.php?t=56273)

VRO 13-05-2008 08:44:37

skins
 
Hola, que tal??

Vereis estoy intentendo cambiar la apariencia de mi aplicación hecha con Delphi 6 y quisiera saber como hacer un Skin. No quiero bajarmelo de internet, sino que quiero hacer mi propio diseño.
¿ Cómo lo podria hacer? ¿ Qué código se utiliza?

Os rogarái me dieseís cualquier tipo de información.


Gracias, de antemano

Paulao 13-05-2008 16:03:17

Ve si estes ejemplo lo sirven? Yo tengo un archivos llamado de "Dicas em Delphi(No se como se dice Dicas en Español)". Yo nunca he intentado hacerlo, pero mi amigo dice que funciona, pero usted pode mejorar. Esto es solo un ejemplo simples, cabe a usted usar su imaginacion. Alguna cosa esta escrito en Portugues(Texto original), pero es simples entender.
Cita:

Aqui iremos tratar da criação de um componente SKIN como os do WINAMP. Para montar os SKINS devemos utilizar um Bitmap e deixar as bordas do formulários transparentes (ocultas).

A solução é bem simples, utilizando o componente Timage, dê uma olhado no fonte:

unit SkinImage;
interface

uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs,
ExtCtrls;

type
TSkinImage = class(TImage)
private

protected
{ Protected declarations }
function BitmapToRegion(bmp: TBitmap) : dword;
procedure OwnerShow(Sender : TObject);
public
constructor Create(AOwner : TComponent); override;
published
{ Published declarations }
end;

procedure Register;

var
Ready : Boolean;

implementation

procedure Register;
begin
RegisterComponents('CLINICA DELPHI', [TSkinImage]);
end;

{ TSkinImage }

constructor TSkinImage.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
if NOT (csDesigning in ComponentState) then
with TForm(AOwner) do
begin
BorderStyle := bsNone;
Self.Top := 0;
Self.Left := 0;
OnShow := OwnerShow;
end;
end;

function TSkinImage.BitmapToRegion(bmp: TBitmap) : dword;
var ix,iy : integer; // loop nas variáveis
tc : TColor; // transparentColor
b1 : boolean; // está olhando o "real"
pixels (no transparent pixels)
c1 : cardinal; // ajusta a variável na região
i1 : integer; // primeira posição real em pixel
begin
Result := 0;
i1 := 0;
// memória do transparent color
tc := bmp.transparentColor and $FFFFFF;
with bmp.canvas do
// enquadrilhe por todas as linhas
for iy := 0 to bmp.height - 1 do
begin
b1 := False;
// esquadrinhe por todo o pixels nesta linha
for ix:=0 to bmp.Width - 1 do
// feito nós acharmos o começo/final seguidos em pixel
if (pixels[ix, iy] and $FFFFFF <> tc) <> b1 then begin
// sim, e foi o último pixel,
// so nós podemos somar uma região de estilo de linha. . .
if b1 then begin
c1:=CreateRectRgn(i1,iy,ix,iy+1);
if result<>0 then
begin
// Esta não é a primeira região
CombineRgn(Result, Result, c1, RGN_OR);
DeleteObject(c1);
// Esta é a primeira região
end
else
Result := c1;
end else i1 := ix;
// mude o modo e procura o primeiro ou último pixel?
b1:=not b1;
end;
// o último pixel nesta fila era um pixel real?
if b1 then begin
c1:=CreateRectRgn(i1, iy, bmp.width-1, iy+1);
if (Result <> 0) then
begin
CombineRgn(Result, Result, c1, RGN_OR);
DeleteObject(c1);
end
else
Result := c1;
end;
end;
end;

procedure TSkinImage.OwnerShow(Sender: TObject);
var
Region : HRGN;
begin
if NOT Ready then
begin
Ready := True;
Region := BitmapToRegion(Picture.Bitmap);
SetWindowRgn(TForm(Owner).Handle, Region, True);
DeleteObject(Region);
end;
end;

initialization
Ready := False;
end.


" Digamos a primeira linha de nosso bitmap se parece:

000XXXXX00XXXXX000000XXXX000

0 -> Pixel Trasparente; X -> Pixel Colorido



Agora minha função passa por esta linha e cria uma região de janela para cada fila de pixels. No exemplo, nós adquiriríamos 3 regiões (4-8, 11-15, 22-25).

Nós fizemos o mesmo para todas as outras linhas no Bitmap, e todas essas regiões.

cHackAll 13-05-2008 17:38:02

Cita:

Empezado por Paulao (Mensaje 286306)
..."Dicas em Delphi" (No se como se dice Dicas en Español)...

Utiliza el Google Translate amigo Paulao; y gracias por compartir ese código. :)

PD; para resaltar la sintaxis Delphi usa las etiquetas [delph¡]CODIGO[/delph¡].

Saludos

VRO 14-05-2008 09:33:52

Gracias
 
Muchas gracias, ahora tengo que adaptarlo a la forma que yo quiero.

Asi que manos a la obra.

Gracias por todo

Neftali [Germán.Estévez] 14-05-2008 13:25:32

En el blog de Carlos García Trujillo tienes una entrada que explica con detalle y ejemplos cómo comenzar con un sistema de Skins.

VRO 16-05-2008 16:19:08

Me viene al pelo
 
Eso es justo lo que necesitaba, ahora queda ajustarlo a todos los componentes que tengo yo en la aplicación y listo.



Muchísimas gracias.


La franja horaria es GMT +2. Ahora son las 14:33:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi