Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

Skin   Найти похожие ветки 

 
alvin   (2002-12-24 07:28) [0]

Уважаемые Мастера, подскажите как разработать программу, использующую скины (желательно пример).


 
Separator ©   (2002-12-24 07:31) [1]

Для этого уже есть готовые компаненты, поищи внимательно


 
alvin   (2002-12-24 19:08) [2]

Но хотелось бы ручками


 
TCrash ©   (2002-12-24 19:27) [3]

Ручками весьма трудоемко. На кларионе я че-то подобное писал.
Все уперлось в то, что при любом используемом скине в окне должны быть те же контролы с теми же названиями.
для делфи нечто подобное может выглядеть след. образом : (подразумеваем, что данные, необходимые для формирования скина уже прочитанны из файла в Record)

procedure TForm1.ApplySkin;
begin
Button1.Cption:=SkinRec.btn1.capt;
Button1.Font:=SkinRer.btn1.fnt;
Form1.Captioin:=SkinRec.Form.Capt;
Form1.Width:=SkinRec.Form.Width;
end;

при этом

Type
TFormRec=record
capt:string;
fnt:TFont;
end;
[кусь]
TSkinRec=record
Form : FormRec;
Btn1 : Btn1Rec;
end;

как видишь процесс трудоемкий.
А вообще ничего сложного.


 
TCrash ©   (2002-12-24 19:38) [4]

Кстати, забыл сказать. Я пользовался маленькой хитростью для изменения не только внешнего вида контролов, но и для изменения их наличия.

Button2.Visible:=False;
Check1.Visible:=True;



Вотт собсно и все.


 
drin ©   (2002-12-25 03:49) [5]

Нужно пробовать и експкркментировать, я писал скин-движок и только раза с 3-4 получилось без багов.
Могу дать несколько советов:
1. Если обьект должен перерисовываться то блокоровать WM_EraseBkgnd;

2. Если нужно менять форму по маске то используй такую ф-ию:


function BitmapToRgn(Image: TBitmap; Mask: TColor): HRGN;
var
TmpRgn: HRGN;
x, y: integer;
ConsecutivePixels: integer;
CurrentPixel: TColor;
CreatedRgns: integer;
CurrentColor: TColor;
begin
CreatedRgns := 0;
Result := CreateRectRgn(0, 0, Image.Width, Image.Height);
inc(CreatedRgns);
if (Image.Width = 0) or (Image.Height = 0) then exit;

for y := 0 to Image.Height - 1 do
begin
CurrentColor := Image.Canvas.Pixels[0,y];
ConsecutivePixels := 1;
for x := 0 to Image.Width - 1 do
begin
CurrentPixel := Image.Canvas.Pixels[x,y];
if CurrentColor = CurrentPixel then
inc(ConsecutivePixels)
else
begin
if CurrentColor = Mask then
begin
TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
inc(CreatedRgns);
DeleteObject(TmpRgn);
end;
CurrentColor := CurrentPixel;
ConsecutivePixels := 1;
end;
end;

if (CurrentColor = Mask) and (ConsecutivePixels > 0) then
begin
TmpRgn := CreateRectRgn(x-ConsecutivePixels, y, x, y+1);
CombineRgn(Result, Result, TmpRgn, RGN_DIFF);
inc(CreatedRgns);
DeleteObject(TmpRgn);
end;
end;
end;


 
ScableR ©   (2002-12-25 04:02) [6]

А загрузку из архива как организовать????


 
drin ©   (2002-12-25 04:09) [7]

Используя алгоритмы или компоненты для архивирования.


 
ScableR ©   (2002-12-25 04:33) [8]

Ну а пример знаешь какой-нибудь дла работы с архивами???
Желательно поточнее....


 
alvin   (2002-12-25 23:45) [9]

Спасибо, Всем, с РОЖДЕСТВОМ И НОВЫМ ГОДОМ ВАС МУЖИКИ


 
drin ©   (2002-12-26 02:36) [10]

Поищи компонент Skins Zip на Торри (www.torry.com)


 
ScableR ©   (2002-12-26 08:46) [11]

to Drin
Ты имел в виду torry.net???
Если да, то не можешь ли точнее??? Я не смог найти :-(



Страницы: 1 вся ветка

Текущий архив: 2003.01.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.013 c
14-25041
Дмитрий К.К.
2002-12-20 05:59
2003.01.09
Именинники 20 декабря


4-25131
Comwad
2002-11-20 08:48
2003.01.09
Узнать объем памяти, который занимает процесс.


1-24867
V-A-V
2002-12-26 15:28
2003.01.09
В сотый раз и все безответно...


1-24901
viper
2002-12-25 20:36
2003.01.09
ComboBox


14-25053
vuk
2002-12-20 15:10
2003.01.09
Software Development