Форум: "Основная";
Текущий архив: 2003.01.09;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c