PDA

View Full Version : تغيير اسكين نرم افزار



javad_rajabloo
چهارشنبه 15 آذر 1391, 17:25 عصر
با سلام خدمت دوستان

من يه برنامه اي نوشتم و در آن از كامپوننت VCL SKIN استفاده كردم

در بخشي از آن قصد دارم كه كاربر پوسته خود را انتخاب نمايد.

تا اينجاش مشكلي نيست

اما مي خوام زماني كه كاربر دوباره برنامه رو اجرا كرد ، آخرين تغييرات ذخيره بشه ، يعني اينكه پوسته اي كه برنامه براي دفعه بعد اجرا ميشه هموني باشه كه كاربر انتخاب كرده بود ، نه اوني كه ديفالت برنامه هست

براي اين كار دو روش رو امتحان كردم كه هيچ كدوم جواب نداد :

1-نام فايل پوسته رو در داخل ديتا بيس ذخيره كردم و در هنگام اجراي برنامه (فرم لود 1) گفتم نام پوسته رو از بانك بخونه و از اون فايل استفاده كنه

1-نام فايل پوسته رو در داخل يك فايل متني گذاشتم و در هنگام اجراي برنامه فايل رو باز كنه و پوسته رو جايگزين پوسته ديفالت كنه

ممنون ميشم راهنمايي كنين

farzadkamali
چهارشنبه 15 آذر 1391, 18:01 عصر
درود

من این کار رو انجام دادم البته از کامپوننت alpha skin استفاده کردم چون تم های بسیار زیباتری داره. ولی روش کار یکیه.

همون روش اول که گفتین جواب میده. احتمالاً یه جای کارو اشتباه رفتین.

من به این صورت عمل کردم:

1- یه قسمت گراشتم برای تغییر پوسته که شامل یه combo box هست که نام تمامی تم ها رو توش نوشتم. (حدود 75 تا) . و یه دکمه تایید. کاربر از combo box نام تم رو انتخاب میکنه(با انتخاب نام هر تم اون تم اعمال میشه). و دکمه تایید رو میزنه.

2- نامی که توی combo box قرار داره یعنی همون اسم تم. عیناً توی جدول ذخیره میشه.

3- در ویژگی on show فرم کد هایی نوشته میشه که با بازشدن نرم افزار نام تم رو از جدول بگیره و اونو اعمال کنه.

این کامپوننت ها توی رویدادهاشون یه قسمت دارن به نام skin directory که مسیر کل تم ها رو باید بدی و یه قسمت به نام Skin name که نام تم مربوطه رو باید بدی.

حالا دستور on show فرم برای جایگزینی تم این می شه:

form1.sskinmanager1.SkinName:=module.theme.FieldBy Name('themename').Value;

sskinmanager1.SkinName همون کامپوننت alpha skin هست که روی فرم قرار دادیم.

باید ویژگی skin name رو مساوی اسمی که داخل جدول ذخیره کردی قرار بدی.

نکته مهم این که نام تم هایی که توی برنامه مینویسی دقیقا با نام تم ها یکی باشه.

در ضمن اگه از دلفی xe2استفاده می کنی خودش تم های زیادی داره.

Emdad2001
پنج شنبه 16 آذر 1391, 19:03 عصر
از انجائی که زیبایی نرم افزار برای من خیلی مهمه من به شکل زیر انجام دادم، شاید دوستان خوششون بیاد :)

اول از همه باید بگم من از Alpha Skin استفاده میکنم، با کد زیر همه تم های الفا رو توش فراخوانی میکنید بعد یک کلید تو رجیستری ایجاد می کنید که آخرین تغییرات را دو باره موقه اجرا برنامه اجرا بشه
خوب روش کار اشیاء مورد نیاز TForm,TRegistry,TComboBox
در قسمت Uses برنامه باید Registry را استفاده کنید بعد با کد زیر در قسمت On Create Form تون بنویسید



var
begin
Reg:TRegistry;
begin
sSkinManager1.SkinDirectory:='';
sSkinManager1.GetSkinNames(sComboBox1.Items);
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software\Project',False);
if Reg.KeyExists('Project') then
begin
sSkinManager1.SkinName:='Office2010 Blue';
sComboBox1.Text:='Office2010 Blue';
end
else
begin
sComboBox1.Text:=Reg.ReadString('Skins');
sSkinManager1.SkinName:=Reg.ReadString('Skins');
sSkinManager1.UpdateSkin(true);
end;
end;


بعد برای تغییر در تم برنامه درحال اجرا کد زیر را در قسمت On Change ComboBox بنویسید


var
Reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_CURRENT_USER;
Reg.OpenKey('Software',False);
Reg.CreateKey('Project');
Reg.OpenKey('Project',False);
Reg.WriteString('Skins',sComboBox1.Text);
Reg.Free;
Reg.CloseKey;
sSkinManager1.SkinName:=sComboBox1.Text;
sSkinManager1.UpdateSkin(true);