📄 main.pas
字号:
end;
end;
procedure TfrmMain.btnReplaceImageClick(Sender: TObject);
var
Bmp: TSeBitmap;
begin
if FSkinSource = nil then Exit;
if FSelectedBitmap = nil then Exit;
{ Replace Image }
FModified := true;
Bmp := OpenSkinBitmap;
if Bmp <> nil then
begin
{ Add Image }
FSkinSource.ReplaceBitmap(FSelectedBitmap, Bmp);
FSelectedBitmap := Bmp;
UpdateSkin;
SelectBitmap(FSelectedBitmap);
end;
end;
procedure TfrmMain.btnDelImageClick(Sender: TObject);
begin
if FSelectedBitmap = nil then Exit;
FSkinSource.Bitmaps.Remove(FSelectedBitmap);
FModified := true;
FSelectedBitmap.Free;
FSelectedBitmap := nil;
ImageView.Picture.Bitmap := nil;
FRoot := nil;
UpdateSkin;
end;
{ Object creation }
procedure TfrmMain.btnSkinObjectClick(Sender: TObject);
begin
CreateSkinObject(TSeSkinObject);
end;
procedure TfrmMain.btnBitmapSkinObjectClick(Sender: TObject);
begin
CreateSkinObject(TSeBitmapSkinObject);
end;
procedure TfrmMain.SpeedButton2Click(Sender: TObject);
begin
CreateSkinObject(TSeFormBitmapSkinObject);
end;
procedure TfrmMain.SpeedButton3Click(Sender: TObject);
begin
CreateSkinObject(TSeSysButtonSkinObject);
end;
procedure TfrmMain.SpeedButton4Click(Sender: TObject);
begin
CreateSkinObject(TSeLinkSkinObject);
end;
procedure TfrmMain.SpeedButton5Click(Sender: TObject);
begin
CreateSkinObject(TSeActiveSkinObject);
end;
procedure TfrmMain.SpeedButton6Click(Sender: TObject);
begin
CreateSkinObject(TSeColorButtonObject);
end;
procedure TfrmMain.SpeedButton7Click(Sender: TObject);
begin
CreateSkinObject(TSeBitmapBoxObject);
end;
procedure TfrmMain.SpeedButton8Click(Sender: TObject);
begin
CreateSkinObject(TSeActiveBitmapBoxObject);
end;
procedure TfrmMain.SpeedButton9Click(Sender: TObject);
begin
CreateSkinObject(TSeButtonBitmapBoxObject);
end;
procedure TfrmMain.SpeedButton10Click(Sender: TObject);
begin
CreateSkinObject(TSeRollPanelObject);
end;
procedure TfrmMain.btnBitmapObjectClick(Sender: TObject);
begin
{ BitmapObject }
CreateSkinObject(TSeBitmapObject);
end;
procedure TfrmMain.btnActiveObjectClick(Sender: TObject);
begin
{ Active Object }
CreateSkinObject(TSeActiveObject);
end;
procedure TfrmMain.btnActiveBitmapClick(Sender: TObject);
begin
{ ActiveBitmap }
CreateSkinObject(TSeActiveBitmap);
end;
procedure TfrmMain.btnSystemButtonClick(Sender: TObject);
begin
{ System Button }
CreateSkinObject(TSeSystemButton);
end;
procedure TfrmMain.btnButtonObjectClick(Sender: TObject);
begin
{ Button Object }
CreateSkinObject(TSeButtonObject);
end;
procedure TfrmMain.btnTextObjectClick(Sender: TObject);
begin
{ Button Object }
CreateSkinObject(TSeTextObject);
end;
procedure TfrmMain.actnTestEmptyExecute(Sender: TObject);
begin
{ Save skin to temp file }
FSkinSource.SaveToFile(TempSkinFile);
{ Test }
frmTestEmpty := TfrmTestEmpty.Create(Self);
try
DesignMode := false;
frmTestEmpty.SE.SkinFile := TempSkinFile;
frmTestEmpty.ShowModal;
finally
DesignMode := true;
frmTestEmpty.Free;
end;
end;
procedure TfrmMain.actnTestExecute(Sender: TObject);
begin
{ Save skin to temp file }
FSkinSource.SaveToFile(TempSkinFile);
{ Test }
frmTest := TfrmTest.Create(Self);
try
DesignMode := false;
frmTest.SE.SkinFile := TempSkinFile;
frmTest.ShowModal;
finally
frmTest.Free;
DesignMode := true;
end;
end;
procedure TfrmMain.SpeedButton13Click(Sender: TObject);
begin
SaveSkin;
{ Test }
frmTest := TfrmTest.Create(Self);
try
frmTest.SE.SkinFile := FFileName;
frmTest.ShowModal;
finally
frmTest.Free;
end;
end;
procedure TfrmMain.btnBackClick(Sender: TObject);
var
Owner: TSeSkinObject;
begin
{ Back }
if (FSelected <> nil) and (FSelected.Owner <> nil) and
(FSelected.Owner is TSeSkinObject)
then
begin
Owner := FSelected.Owner as TSeSkinObject;
TCompAccess(Owner).SetChildOrder(FSelected, 0);
UpdateSkin;
FModified := true;
Exit;
end;
end;
procedure TfrmMain.TabsChange(Sender: TObject);
begin
case Tabs.TabIndex of
0: PageStandard.BringToFront;
1: PageOld.BringToFront;
end;
end;
procedure TfrmMain.actnCopyExecute(Sender: TObject);
var
S: TStringStream;
SkinObject: TSeSkinObject;
Data: THandle;
DataPtr: Pointer;
Size: Cardinal;
begin
if FSkinSource = nil then Exit;
{ Copy }
if (FSelected <> nil) then
begin
SkinObject := FSelected.CreateCopy(nil);
SkinObject.Name := 'CopyOf'+SkinObject.Name;
S := TStringStream.Create('');
try
SaveSkinObject(S, SkinObject);
FMyClipboard := S.DataString;
Size := Length(FMyClipboard);
FMyClipboard := IntToStr(Size) + '@' + FMyClipboard;
Size := Length(FMyClipboard);
Data := GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, Size + 1);
try
DataPtr := GlobalLock(Data);
try
Move(PChar(FMyClipboard)^, DataPtr^, Size + 1);
Clipboard.SetAsHandle(CF_COMPONENT, Data);
finally
GlobalUnlock(Data);
end;
except
GlobalFree(Data);
raise;
end;
finally
S.Free;
SkinObject.Free;
end;
end;
end;
procedure TfrmMain.actnPasteExecute(Sender: TObject);
var
SkinObject: TSeSkinObject;
S: TStringStream;
Size: integer;
Data: THandle;
begin
if FSkinSource = nil then Exit;
if not Clipboard.HasFormat(CF_COMPONENT) then Exit;
SkinObject := nil;
{ Paste }
if (FSelected <> nil) then
begin
Data := Clipboard.GetAsHandle(CF_COMPONENT);
try
if Data <> 0 then
begin
SaveData := GlobalLock(Data);
Size := StrToInt(Copy(SaveData^, 1, Pos('@', SaveData^)-1));
if Size > 0 then
begin
SetLength(FMyClipboard, Size);
Move(SaveData[Pos('@', SaveData^)], PChar(FMyClipboard)^, Size);
S := TStringStream.Create(FMyClipboard);
try
SkinObject := LoadSkinObject(S, FSelected);
SkinObject.Bitmaps := FSkinSource.Bitmaps;
SkinObject.AfterLoad;
except
raise Exception.Create('Invalid clipboard format');
end;
S.Free;
end;
end;
finally
if Data <> 0 then GlobalUnlock(Data);
end;
if SkinObject = nil then
begin
ShowMessage('Invalid clipboard format');
Exit;
end;
FSelected.Aligning;
{ Add TSeSkinObject }
FSelected := SkinObject;
UpdateSkin;
SelectObject(SkinObject);
FModified := true;
end
else
if FRoot <> nil then
begin
{ To root }
Data := Clipboard.GetAsHandle(CF_COMPONENT);
try
if Data <> 0 then
begin
SaveData := GlobalLock(Data);
Size := StrToInt(Copy(SaveData^, 1, Pos('@', SaveData^)-1));
if Size > 0 then
begin
SetLength(FMyClipboard, Size);
Move(SaveData[Pos('@', SaveData^)], PChar(FMyClipboard)^, Size);
S := TStringStream.Create(FMyClipboard);
try
SkinObject := LoadSkinObject(S, FRoot);
SkinObject.Bitmaps := FSkinSource.Bitmaps;
SkinObject.AfterLoad;
except
raise Exception.Create('Invalid clipboard format');
end;
S.Free;
end;
end;
finally
if Data <> 0 then GlobalUnlock(Data);
end;
if SkinObject = nil then
begin
ShowMessage('Invalid clipboard format');
end;
FRoot.Aligning;
{ Add TSeSkinObject }
FSelected := SkinObject;
UpdateSkin;
SelectObject(SkinObject);
FModified := true;
end
else
begin
{ To nil root }
Data := Clipboard.GetAsHandle(CF_COMPONENT);
try
if Data <> 0 then
begin
SaveData := GlobalLock(Data);
Size := StrToInt(Copy(SaveData^, 1, Pos('@', SaveData^)-1));
if Size > 0 then
begin
SetLength(FMyClipboard, Size);
Move(SaveData[Pos('@', SaveData^)], PChar(FMyClipboard)^, Size);
S := TStringStream.Create(FMyClipboard);
try
SkinObject := LoadSkinObject(S, nil);
SkinObject.Bitmaps := FSkinSource.Bitmaps;
SkinObject.AfterLoad;
except
raise Exception.Create('Invalid clipboard format');
end;
S.Free;
end;
end;
finally
if Data <> 0 then GlobalUnlock(Data);
end;
if SkinObject = nil then
begin
ShowMessage('Invalid clipboard format');
end;
FSkinSource.Add(SkinObject);
{ Add TSeSkinObject }
FRoot := SkinObject;
FSelected := SkinObject;
UpdateSkin;
SelectObject(SkinObject);
FModified := true;
end;
end;
procedure TfrmMain.Button1Click(Sender: TObject);
var
i: integer;
CharSet: Longint;
begin
if FSkinSource = nil then Exit;
{ Set Charset }
if IdentToCharset(cbCharset.Text, CharSet) then
begin
for i := 0 to FSkinSource.Count - 1 do
FSkinSource.Objects[i].SetCharset(CharSet)
end;
end;
procedure TfrmMain.KSDevelopmantSite1Click(Sender: TObject);
begin
{ Homepage }
ShellExecute(0, 'open', 'http://www.ksdev.com', nil, nil, SW_SHOWNORMAL);
end;
procedure TfrmMain.AboutSkinBuilder1Click(Sender: TObject);
begin
{ About }
frmAbout.ShowModal;
end;
procedure TfrmMain.DoInspectorChanging(Sender: TZPropList; var CanChange: Boolean);
begin
{ Save state }
SaveState;
end;
procedure TfrmMain.DoInspectorChange(Sender: TObject);
begin
{ FInspector change }
UpdateSkin;
FModified := true;
end;
procedure TfrmMain.RestoreState;
begin
{ Restore state for Undo }
if FStateNum = 0 then Exit;
if FStateList.Count = 0 then Exit;
{ Restore }
FSkinSource.Clear;
TStateClass(FStateList[FStateNum-1]).Stream.Position := 0;
FSkinSource.LoadFromStream(TStateClass(FStateList[FStateNum-1]).Stream);
FRoot := FSkinSource.GetObjectByName(TStateClass(FStateList[FStateNum-1]).Root);
FSelected := FSkinSource.GetObjectByName(TStateClass(FStateList[FStateNum-1]).Selected);
{ Free }
TStateClass(FStateList[FStateNum-1]).Free;
FStateList.Delete(FStateNum-1);
Dec(FStateNum);
{ Update }
UpdateSkin;
end;
procedure TfrmMain.SaveState;
var
State: TStateClass;
begin
{ Save state for Undo }
State := TStateClass.Create;
FSkinSource.SaveToStream(State.Stream);
if FRoot <> nil then
State.Root := FRoot.Name;
if FSelected <> nil then
State.Selected := FSelected.Name;
{ Add to list }
FStateList.Add(State);
Inc(FStateNum);
if FStateNum > 2 then
begin
TStateClass(FStateList[0]).Free;
FStateList.Delete(0);
Dec(FStateNum);
end;
end;
procedure TfrmMain.actnUndoExecute(Sender: TObject);
begin
RestoreState;
end;
procedure TfrmMain.actnExportExecute(Sender: TObject);
begin
{ Bitmaps export }
frmExport := TfrmExport.Create(Self);
frmExport.ShowModal;
frmExport.Free;
end;
procedure TfrmMain.SpeedButton14Click(Sender: TObject);
begin
{ Pick color }
frmPickColor.ShowModal;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -