Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Skin [D4, D5, D7, WinME, WinXP]


alvin ©   (2002-12-24 07:28:00) 

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


ScableR   (2002-12-26 08:46:00) [1]

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


drin   (2002-12-26 02:36:00) [2]

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


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

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


ScableR   (2002-12-25 04:33:00) [4]

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


drin   (2002-12-25 04:09:00) [5]

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


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

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


drin   (2002-12-25 03:49:00) [7]

Нужно пробовать и експкркментировать, я писал скин-движок и только раза с 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;


TCrash   (2002-12-24 19:38:00) [8]

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

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



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


TCrash   (2002-12-24 19:27:00) [9]

Ручками весьма трудоемко. На кларионе я че-то подобное писал.
Все уперлось в то, что при любом используемом скине в окне должны быть те же контролы с теми же названиями.
для делфи нечто подобное может выглядеть след. образом : (подразумеваем, что данные, необходимые для формирования скина уже прочитанны из файла в 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;

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


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

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


Separator   (2002-12-24 07:31:00) [11]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо