SkinData.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:137k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  2.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  3.   IniFile.WriteInteger(IDName, 'unenabledfontcolor', UnEnabledFontColor);
  4.   IniFile.WriteInteger(IDName, 'framefontcolor', FrameFontColor);
  5.   WriteBoolean(IniFile, IDName, 'morphing', Morphing);
  6.   WriteMorphKind(IniFile, IDName, 'morphkind', MorphKind);
  7.   WriteRect(IniFile, IDName, 'activeskinrect', ActiveSkinRect);
  8.   WriteRect(IniFile, IDName, 'checkimagearea', CheckImageArea);
  9.   WriteRect(IniFile, IDName, 'textarea', TextArea);
  10.   WriteRect(IniFile, IDName, 'checkimagerect', CheckImageRect);
  11.   WriteRect(IniFile, IDName, 'uncheckimagerect', UnCheckImageRect);
  12.   WriteRect(IniFile, IDName, 'activecheckimagerect', ActiveCheckImageRect);
  13.   WriteRect(IniFile, IDName, 'activeuncheckimagerect', ActiveUnCheckImageRect);
  14.   WriteRect(IniFile, IDName, 'unenabledcheckimagerect', UnEnabledCheckImageRect);
  15.   WriteRect(IniFile, IDName, 'unenableduncheckimagerect', UnEnabledUnCheckImageRect);
  16. end;
  17. constructor TspDataSkinMenuButtonControl.Create;
  18. begin
  19.   inherited;
  20. end;
  21. procedure TspDataSkinMenuButtonControl.LoadFromFile;
  22. begin
  23.   inherited;
  24.   TrackButtonRect := ReadRect(IniFile, IDName, 'trackbuttonrect');
  25. end;
  26. procedure TspDataSkinMenuButtonControl.SaveToFile;
  27. begin
  28.   inherited;
  29.   WriteRect(IniFile, IDName, 'trackbuttonrect', TrackButtonRect);
  30. end;
  31. constructor TspDataSkinButtonControl.Create;
  32. begin
  33.   inherited;
  34.   FontName := 'Arial';
  35.   FontStyle := [];
  36.   FontHeight := 12;
  37.   FontColor := 0;
  38.   ActiveFontColor := 0;
  39.   DownFontColor := 0;
  40.   FontColor := 0;
  41.   ActiveSkinRect := NullRect;
  42.   DownSkinRect := NullRect;
  43.   MorphKind := mkDefault;
  44. end;
  45. procedure TspDataSkinButtonControl.LoadFromFile;
  46. begin
  47.   inherited;
  48.   FontName := IniFile.ReadString(IDName, 'fontname', 'Arial');
  49.   FontHeight := IniFile.ReadInteger(IDName, 'fontheight', 14);
  50.   FontStyle := ReadFontStyles(IniFile, IDName, 'fontstyle');
  51.   FontColor := IniFile.ReadInteger(IDName, 'fontcolor', 0);
  52.   ActiveFontColor := IniFile.ReadInteger(IDName, 'activefontcolor', 0);
  53.   DisabledFontColor := IniFile.ReadInteger(IDName, 'disabledfontcolor', 0);
  54.   DownFontColor := IniFile.ReadInteger(IDName, 'downfontcolor', 0);
  55.   Morphing := ReadBoolean(IniFile, IDName, 'morphing');
  56.   MorphKind := ReadMorphKind(IniFile, IDName, 'morphkind');
  57.   ActiveSkinRect := ReadRect(IniFile, IDName, 'activeskinrect');
  58.   DownSkinRect := ReadRect(IniFile, IDName, 'downskinrect');
  59.   DisabledSkinRect := ReadRect(IniFile, IDName, 'disabledskinrect');
  60. end;
  61. procedure TspDataSkinButtonControl.SaveToFile;
  62. begin
  63.   inherited;
  64.   IniFile.WriteString(IDName, 'fontname', FontName);
  65.   IniFile.WriteInteger(IDName, 'fontheight', FontHeight);
  66.   WriteFontStyles(IniFile, IDName, 'fontstyle', FontStyle);
  67.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  68.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  69.   IniFile.WriteInteger(IDName, 'downfontcolor', DownFontColor);
  70.   IniFile.WriteInteger(IDName, 'disabledfontcolor',   DisabledFontColor);
  71.   WriteBoolean(IniFile, IDName, 'morphing', Morphing);
  72.   WriteMorphKind(IniFile, IDName, 'morphkind', MorphKind);
  73.   WriteRect(IniFile, IDName, 'activeskinrect', ActiveSkinRect);
  74.   WriteRect(IniFile, IDName, 'downskinrect', DownSkinRect);
  75.   WriteRect(IniFile, IDName, 'disabledskinrect', DisabledSkinRect);
  76. end;
  77. constructor TspDataSkinArea.Create(AIDName: String; ARect: TRect);
  78. begin
  79.   IDName := AIDName;
  80.   AreaRect := ARect;
  81. end;
  82. constructor TspDataSkinObject.Create;
  83. begin
  84.   IDName := AIDName;
  85.   Hint := '';
  86.   ActivePictureIndex := -1;
  87.   SkinRect := NullRect;
  88.   ActiveSkinRect := SkinRect;
  89.   Morphing := False;
  90.   CursorIndex := -1;
  91.   RollUp := False;
  92. end;
  93. procedure TspDataSkinObject.LoadFromFile;
  94. begin
  95.   Hint := IniFile.ReadString(IDName, 'hint', '');
  96.   RollUp := ReadBoolean(IniFile, IDName, 'rollup');
  97.   ActivePictureIndex := IniFile.ReadInteger(IDName, 'activepictureindex', -1);
  98.   SkinRectInAPicture := ReadBoolean(IniFile, IDName, 'skinrectinapicture');
  99.   CursorIndex := IniFile.ReadInteger(IDName, 'cursorindex', -1);
  100.   SkinRect := ReadRect(IniFile, IDName, 'skinrect');
  101.   ActiveSkinRect := ReadRect(IniFile, IDName, 'activeskinrect');
  102.   Morphing := ReadBoolean(IniFile, IDName, 'morphing');
  103.   MorphKind := ReadMorphKind(IniFile, IDName, 'morphkind');
  104. end;
  105. procedure TspDataSkinObject.SaveToFile;
  106. begin
  107.   IniFile.EraseSection(IDName);
  108.   IniFile.WriteString(IDName, 'hint', Hint);
  109.   WriteBoolean(IniFile, IDName, 'rollup',  RollUp);
  110.   IniFile.WriteInteger(IDName, 'activepictureindex', ActivePictureIndex);
  111.   WriteBoolean(IniFile, IDName, 'skinrectinapicture', SkinRectInAPicture);
  112.   IniFile.WriteInteger(IDName, 'cursorindex', CursorIndex);
  113.   WriteRect(IniFile, IDName, 'skinrect', SkinRect);
  114.   WriteRect(IniFile, IDName, 'activeskinrect', ActiveSkinRect);
  115.   WriteBoolean(IniFile, IDName, 'morphing', Morphing);
  116.   WriteMorphKind(IniFile, IDName, 'morphkind', MorphKind);
  117. end;
  118. procedure TspDataUserObject.LoadFromFile;
  119. begin
  120.   RollUp := ReadBoolean(IniFile, IDName, 'rollup');
  121.   SkinRect := ReadRect(IniFile, IDName, 'skinrect');
  122.   CursorIndex := IniFile.ReadInteger(IDName, 'cursorindex', -1);
  123. end;
  124. procedure TspDataUserObject.SaveToFile;
  125. begin
  126.   IniFile.EraseSection(IDName);
  127.   WriteBoolean(IniFile, IDName, 'rollup',  RollUp);
  128.   WriteRect(IniFile, IDName, 'skinrect', SkinRect);
  129.   IniFile.WriteInteger(IDName, 'cursorindex', CursorIndex);
  130. end;
  131. procedure TspDataSkinFrameGaugeObject.LoadFromFile;
  132. var
  133.   S: String;
  134. begin
  135.   inherited;
  136.   MinValue := IniFile.ReadInteger(IDName, 'minvalue', 0);
  137.   MaxValue := IniFile.ReadInteger(IDName, 'maxvalue', 0);
  138.   CountFrames := IniFile.ReadInteger(IDName, 'countframes', 0);
  139.   S := IniFile.ReadString(IDName, 'framesplacement', 'fphorizontal');
  140.   if S = 'fphorizontal'
  141.   then FramesPlacement := fpHorizontal
  142.   else FramesPlacement := fpVertical;
  143. end;
  144. procedure TspDataSkinFrameGaugeObject.SaveToFile;
  145. var
  146.   S: String;
  147. begin
  148.   inherited;
  149.   IniFile.WriteInteger(IDName, 'minvalue', MinValue);
  150.   IniFile.WriteInteger(IDName, 'maxvalue', MaxValue);
  151.   IniFile.WriteInteger(IDName, 'countframes', CountFrames);
  152.   if FramesPlacement = fpHorizontal
  153.   then S := 'fphorizontal'
  154.   else S := 'fpvertical';
  155.   IniFile.WriteString(IDName, 'framesplacement', S);
  156. end;
  157. procedure TspDataSkinFrameRegulatorObject.LoadFromFile;
  158. var
  159.   S: String;
  160. begin
  161.   inherited;
  162.   MinValue := IniFile.ReadInteger(IDName, 'minvalue', 0);
  163.   MaxValue := IniFile.ReadInteger(IDName, 'maxvalue', 0);
  164.   CountFrames := IniFile.ReadInteger(IDName, 'countframes', 0);
  165.   S := IniFile.ReadString(IDName, 'framesplacement', 'fphorizontal');
  166.   if S = 'fphorizontal'
  167.   then FramesPlacement := fpHorizontal
  168.   else FramesPlacement := fpVertical;
  169.   S := IniFile.ReadString(IDName, 'kind', 'rkround');
  170.   if S = 'rkround'
  171.   then Kind := rkRound
  172.   else
  173.   if S = 'rkhorizontal'
  174.   then Kind := rkHorizontal
  175.   else Kind := rkVertical;
  176. end;
  177. procedure TspDataSkinFrameRegulatorObject.SaveToFile;
  178. var
  179.   S: String;
  180. begin
  181.   inherited;
  182.   IniFile.WriteInteger(IDName, 'minvalue', MinValue);
  183.   IniFile.WriteInteger(IDName, 'maxvalue', MaxValue);
  184.   IniFile.WriteInteger(IDName, 'countframes', CountFrames);
  185.   if FramesPlacement = fpHorizontal
  186.   then S := 'fphorizontal'
  187.   else S := 'fpvertical';
  188.   IniFile.WriteString(IDName, 'framesplacement', S);
  189.   case Kind of
  190.     rkRound: S := 'rkround';
  191.     rkVertical: S := 'rkvertical';
  192.     rkHorizontal: S := 'rkhorizontal';
  193.   end;
  194.   IniFile.WriteString(IDName, 'kind', S);
  195. end;
  196. procedure TspDataSkinGauge.LoadFromFile;
  197. var
  198.   S: String;
  199. begin
  200.   inherited;
  201.   MinValue := IniFile.ReadInteger(IDName, 'minvalue', 0);
  202.   MaxValue := IniFile.ReadInteger(IDName, 'maxvalue', 0);
  203.   S := IniFile.ReadString(IDName, 'kind', 'gkhorizontal');
  204.   if S = 'gkhorizontal' then Kind := gkHorizontal else Kind := gkVertical;
  205. end;
  206. procedure TspDataSkinGauge.SaveToFile;
  207. var
  208.   S: String;
  209. begin
  210.   inherited;
  211.   IniFile.WriteInteger(IDName, 'minvalue', MinValue);
  212.   IniFile.WriteInteger(IDName, 'maxvalue', MaxValue);
  213.   if Kind = gkHorizontal then S := 'gkhorizontal' else S := 'gkvertical';
  214.   IniFile.WriteString(IDName, 'kind', S);
  215. end;
  216. procedure TspDataSkinTrackBar.LoadFromFile;
  217. begin
  218.   inherited;
  219.   ButtonRect := ReadRect(IniFile, IDName, 'buttonrect');
  220.   ActiveButtonRect := ReadRect(IniFile, IDName, 'activebuttonrect');
  221.   BeginPoint := ReadPoint(IniFile, IDName, 'beginpoint');
  222.   EndPoint := ReadPoint(IniFile, IDName, 'endpoint');
  223.   MinValue := IniFile.ReadInteger(IDName, 'minvalue', 0);
  224.   MaxValue := IniFile.ReadInteger(IDName, 'maxvalue', 0);
  225.   MouseDownChangeValue := ReadBoolean(IniFile, IDName, 'mousedownchangevalue');
  226.   Morphing := False;
  227. end;
  228. procedure TspDataSkinTrackBar.SaveToFile;
  229. begin
  230.   inherited;
  231.   WriteRect(IniFile, IDName, 'buttonrect', ButtonRect);
  232.   WriteRect(IniFile, IDName, 'activebuttonrect', ActiveButtonRect);
  233.   WritePoint(IniFile, IDName, 'beginpoint', BeginPoint);
  234.   WritePoint(IniFile, IDName, 'endpoint', EndPoint);
  235.   IniFile.WriteInteger(IDName, 'minvalue', MinValue);
  236.   IniFile.WriteInteger(IDName, 'maxvalue', MaxValue);
  237.   WriteBoolean(IniFile, IDName, 'mousedownchangevalue', MouseDownChangeValue);
  238. end;
  239. procedure TspDataSkinAnimate.LoadFromFile;
  240. var
  241.   S: String;
  242. begin
  243.   inherited;
  244.   Morphing := False;
  245.   CountFrames := IniFile.ReadInteger(IDName, 'countframes', 1);
  246.   Cycle := ReadBoolean(IniFile, IDName, 'cycle');
  247.   ButtonStyle := ReadBoolean(IniFile, IDName, 'buttonstyle');
  248.   TimerInterval := IniFile.ReadInteger(IDName, 'timerinterval', 50);
  249.   S := IniFile.ReadString(IDName, 'command', 'cmdefault');
  250.   if S = 'cmclose' then Command := cmClose else
  251.   if S = 'cmmaximize' then Command := cmMaximize else
  252.   if S = 'cmminimize' then Command := cmMinimize else
  253.   if S = 'cmsysmenu' then Command := cmSysMenu else
  254.   if S = 'cmdefault' then Command := cmDefault else
  255.   Command := cmRollUp;
  256. end;
  257. procedure TspDataSkinAnimate.SaveToFile;
  258. var
  259.   S: String;
  260. begin
  261.   inherited;
  262.   IniFile.WriteInteger(IDName, 'countframes', CountFrames);
  263.   WriteBoolean(IniFile, IDName, 'cycle', Cycle);
  264.   WriteBoolean(IniFile, IDName, 'buttonstyle', ButtonStyle);
  265.   IniFile.WriteInteger(IDName, 'timerinterval', TimerInterval);
  266.   if Command = cmClose then S := 'cmclose' else
  267.   if Command = cmMaximize then S := 'cmmaximize' else
  268.   if Command = cmMinimize then S := 'cmminimize' else
  269.   if Command = cmSysMenu then S := 'cmsysmenu' else
  270.   if Command = cmDefault then S := 'cmdefault' else
  271.   S := 'cmrollup';
  272.   IniFile.WriteString(IDName, 'command', S);
  273. end;
  274. constructor TspDataSkinPopupWindow.Create;
  275. begin
  276.   inherited;
  277.   WindowPictureIndex := -1;
  278.   MaskPictureIndex := -1;
  279.   LTPoint := Point(0, 0);
  280.   LBPoint := Point(0, 0);
  281.   RTPoint := Point(0, 0);
  282.   RBPoint := Point(0, 0);
  283.   CursorIndex := -1;
  284.   ScrollMarkerColor := 0;
  285.   ScrollMarkerActiveColor := 0;
  286. end;
  287. procedure TspDataSkinPopupWindow.LoadFromFile;
  288. begin
  289.   WindowPictureIndex := IniFile.ReadInteger(
  290.     'POPUPWINDOW', 'windowpictureindex', -1);
  291.   MaskPictureIndex := IniFile.ReadInteger(
  292.     'POPUPWINDOW', 'maskpictureindex', -1);
  293.   LTPoint := ReadPoint(IniFile, 'POPUPWINDOW', 'lefttoppoint');
  294.   RTPoint := Readpoint(IniFile, 'POPUPWINDOW', 'righttoppoint');
  295.   LBPoint := ReadPoint(IniFile, 'POPUPWINDOW', 'leftbottompoint');
  296.   RBPoint := ReadPoint(IniFile, 'POPUPWINDOW', 'rightbottompoint');
  297.   CursorIndex := IniFile.ReadInteger('POPUPWINDOW', 'cursorindex', -1);
  298.   ItemsRect := ReadRect(IniFile, 'POPUPWINDOW', 'itemsrect');
  299.   ScrollMarkerColor := IniFile.ReadInteger('POPUPWINDOW', 'scrollmarkercolor', 0);
  300.   ScrollMarkerActiveColor := IniFile.ReadInteger('POPUPWINDOW', 'scrollmarkeractivecolor', 0);
  301. end;
  302. procedure TspDataSkinPopupWindow.SaveToFile;
  303. begin
  304.   IniFile.EraseSection('POPUPWINDOW');
  305.   IniFile.WriteInteger('POPUPWINDOW', 'windowpictureindex',
  306.     WindowPictureIndex);
  307.   IniFile.WriteInteger( 'POPUPWINDOW', 'maskpictureindex',
  308.     MaskPictureIndex);
  309.   WritePoint(IniFile, 'POPUPWINDOW', 'lefttoppoint', LTPoint);
  310.   WritePoint(IniFile, 'POPUPWINDOW', 'righttoppoint', RTPoint);
  311.   WritePoint(IniFile, 'POPUPWINDOW', 'leftbottompoint', LBPoint);
  312.   WritePoint(IniFile, 'POPUPWINDOW', 'rightbottompoint', RBPoint);
  313.   WriteRect(IniFile, 'POPUPWINDOW', 'itemsrect', ItemsRect);
  314.   IniFile.WriteInteger('POPUPWINDOW', 'cursorindex', CursorIndex);
  315.   IniFile.WriteInteger('POPUPWINDOW', 'scrollmarkercolor', ScrollMarkerColor);
  316.   IniFile.WriteInteger('POPUPWINDOW', 'scrollmarkeractivecolor', ScrollMarkerActiveColor);
  317. end;
  318. constructor TspDataSkinHintWindow.Create;
  319. begin
  320.   inherited;
  321.   WindowPictureIndex := -1;
  322.   MaskPictureIndex := -1;
  323.   LTPoint := Point(0, 0);
  324.   LBPoint := Point(0, 0);
  325.   RTPoint := Point(0, 0);
  326.   RBPoint := Point(0, 0);
  327.   ClRect := NullRect;
  328.   FontName := 'Arial';
  329.   FontStyle := [];
  330.   FontHeight := 12;
  331.   FontColor := 0;
  332. end;
  333. procedure TspDataSkinHintWindow.LoadFromFile;
  334. begin
  335.   WindowPictureIndex := IniFile.ReadInteger(
  336.     'HINTWINDOW', 'windowpictureindex', -1);
  337.   MaskPictureIndex := IniFile.ReadInteger(
  338.     'HINTWINDOW', 'maskpictureindex', -1);
  339.   LTPoint := ReadPoint(IniFile, 'HINTWINDOW', 'lefttoppoint');
  340.   RTPoint := Readpoint(IniFile, 'HINTWINDOW', 'righttoppoint');
  341.   LBPoint := ReadPoint(IniFile, 'HINTWINDOW', 'leftbottompoint');
  342.   RBPoint := ReadPoint(IniFile, 'HINTWINDOW', 'rightbottompoint');
  343.   ClRect := ReadRect(IniFile, 'HINTWINDOW', 'clientrect');
  344.   FontName := IniFile.ReadString('HINTWINDOW', 'fontname', 'Arial');
  345.   FontHeight := IniFile.ReadInteger('HINTWINDOW', 'fontheight', 14);
  346.   FontStyle := ReadFontStyles(IniFile, 'HINTWINDOW', 'fontstyle');
  347.   FontColor := IniFile.ReadInteger('HINTWINDOW', 'fontcolor', 0);
  348. end;
  349. procedure TspDataSkinHintWindow.SaveToFile;
  350. begin
  351.   IniFile.EraseSection('HINTWINDOW');
  352.   IniFile.WriteInteger('HINTWINDOW', 'windowpictureindex',
  353.     WindowPictureIndex);
  354.   IniFile.WriteInteger( 'HINTWINDOW', 'maskpictureindex',
  355.     MaskPictureIndex);
  356.   WritePoint(IniFile, 'HINTWINDOW', 'lefttoppoint', LTPoint);
  357.   WritePoint(IniFile, 'HINTWINDOW', 'righttoppoint', RTPoint);
  358.   WritePoint(IniFile, 'HINTWINDOW', 'leftbottompoint', LBPoint);
  359.   WritePoint(IniFile, 'HINTWINDOW', 'rightbottompoint', RBPoint);
  360.   WriteRect(IniFile, 'HINTWINDOW', 'clientrect', ClRect);
  361.   IniFile.WriteString('HINTWINDOW', 'fontname', FontName);
  362.   IniFile.WriteInteger('HINTWINDOW', 'fontheight', FontHeight);
  363.   WriteFontStyles(IniFile, 'HINTWINDOW', 'fontstyle', FontStyle);
  364.   IniFile.WriteInteger('HINTWINDOW', 'fontcolor', FontColor);
  365. end;
  366. procedure TspDataSkinMenuItem.LoadFromFile;
  367. begin
  368.   inherited;
  369.   ItemLO := IniFile.ReadInteger(IDName, 'itemleftoffset', 0);
  370.   ItemRO := IniFile.ReadInteger(IDName, 'itemrightoffset', 0);
  371.   DividerRect := ReadRect(IniFile, IDName, 'dividerrect');
  372.   DividerLO := IniFile.ReadInteger(IDName, 'dividerleftoffset', 0);
  373.   DividerRO := IniFile.ReadInteger(IDName, 'dividerrightoffset', 0);
  374.   TextRct := ReadRect(IniFile, IDName, 'textrect');
  375.   FontName := IniFile.ReadString(IDName, 'fontname', 'Arial');
  376.   FontHeight := IniFile.ReadInteger(IDName, 'fontheight', 14);
  377.   FontStyle := ReadFontStyles(IniFile, IDName, 'fontstyle');
  378.   FontColor := IniFile.ReadInteger(IDName, 'fontcolor', 0);
  379.   ActiveFontColor := IniFile.ReadInteger(IDName, 'activefontcolor', 0);
  380.   UnEnabledFontColor := IniFile.ReadInteger(IDName, 'unenabledfontcolor', 0);
  381. end;
  382. procedure TspDataSkinMenuItem.SaveToFile;
  383. begin
  384.   inherited;
  385.   IniFile.WriteInteger(IDName, 'itemleftoffset', ItemLO);
  386.   IniFile.WriteInteger(IDName, 'itemrightoffset', ItemRO);
  387.   WriteRect(IniFile, IDName, 'dividerrect', DividerRect);
  388.   IniFile.WriteInteger(IDName, 'dividerleftoffset', DividerLO);
  389.   IniFile.WriteInteger(IDName, 'dividerrightoffset', DividerRO);
  390.   WriteRect(IniFile, IDName, 'textrect', TextRct);
  391.   IniFile.WriteString(IDName, 'fontname', FontName);
  392.   IniFile.WriteInteger(IDName, 'fontheight', FontHeight);
  393.   WriteFontStyles(IniFile, IDName, 'fontstyle', FontStyle);
  394.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  395.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  396.   IniFile.WriteInteger(IDName, 'unenabledfontcolor', UnEnabledFontColor);
  397. end;
  398. procedure TspDataSkinMainMenuItem.LoadFromFile;
  399. begin
  400.   inherited;
  401.   ItemLO := IniFile.ReadInteger(IDName, 'itemleftoffset', 0);
  402.   ItemRO := IniFile.ReadInteger(IDName, 'itemrightoffset', 0);
  403.   DownRect := ReadRect(IniFile, IDName, 'downrect');
  404.   TextRct := ReadRect(IniFile, IDName, 'textrect');
  405.   FontName := IniFile.ReadString(IDName, 'fontname', 'Arial');
  406.   FontHeight := IniFile.ReadInteger(IDName, 'fontheight', 14);
  407.   FontStyle := ReadFontStyles(IniFile, IDName, 'fontstyle');
  408.   FontColor := IniFile.ReadInteger(IDName, 'fontcolor', 0);
  409.   ActiveFontColor := IniFile.ReadInteger(IDName, 'activefontcolor', 0);
  410.   DownFontColor := IniFile.ReadInteger(IDName, 'downfontcolor', 0);
  411.   UnEnabledFontColor := IniFile.ReadInteger(IDName, 'unenabledfontColor', 0);
  412. end;
  413. procedure TspDataSkinMainMenuItem.SaveToFile;
  414. begin
  415.   inherited;
  416.   IniFile.WriteInteger(IDName, 'itemleftoffset', ItemLO);
  417.   IniFile.WriteInteger(IDName, 'itemrightoffset', ItemRO);
  418.   WriteRect(IniFile, IDName, 'downrect', DownRect);
  419.   WriteRect(IniFile, IDName, 'textrect', TextRct);
  420.   IniFile.WriteString(IDName, 'fontname', FontName);
  421.   IniFile.WriteInteger(IDName, 'fontheight', FontHeight);
  422.   WriteFontStyles(IniFile, IDName, 'fontstyle', FontStyle);
  423.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  424.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  425.   IniFile.WriteInteger(IDName, 'downfontcolor', DownFontColor);
  426.   IniFile.WriteInteger(IDName, 'unenabledfontColor', UnEnabledFontColor);
  427. end;
  428. constructor TspDataSkinButton.Create(AIDName: String);
  429. begin
  430.   inherited;
  431.   GroupIndex := -1;
  432.   DownRect := NullRect;
  433. end;
  434. procedure TspDataSkinButton.SaveToFile;
  435. begin
  436.   inherited;
  437.   WriteRect(IniFile, IDName, 'downrect', DownRect);
  438.   WriteRect(IniFile, IDName, 'disableskinrsect', DisableSkinRect);
  439.   IniFile.WriteInteger(IDName, 'groupindex', GroupIndex);
  440. end;
  441. procedure TspDataSkinButton.LoadFromFile;
  442. begin
  443.   inherited;
  444.   DownRect := ReadRect(IniFile, IDName, 'downrect');
  445.   DisableSkinRect := ReadRect(IniFile, IDName, 'disableskinrsect');
  446.   GroupIndex := IniFile.ReadInteger(IDName, 'groupindex', -1);
  447. end;
  448. procedure TspDataSkinStdButton.LoadFromFile;
  449. var
  450.   S: String;
  451. begin
  452.   inherited;
  453.   S := IniFile.ReadString(IDName, 'command', 'cmdefault');
  454.   if S = 'cmclose' then Command := cmClose else
  455.   if S = 'cmmaximize' then Command := cmMaximize else
  456.   if S = 'cmminimize' then Command := cmMinimize else
  457.   if S = 'cmsysmenu' then Command := cmSysMenu else
  458.   if S = 'cmdefault' then Command := cmDefault else
  459.   Command := cmRollUp;
  460.   RestoreRect := ReadRect(IniFile, IDName, 'restorerect');
  461.   RestoreActiveRect := ReadRect(IniFile, IDName, 'restoreactiverect');
  462.   RestoreDownRect := ReadRect(IniFile, IDName, 'restoredownrect');
  463. end;
  464. procedure TspDataSkinStdButton.SaveToFile;
  465. var
  466.   S: String;
  467. begin
  468.   inherited;
  469.   if Command = cmClose then S := 'cmclose' else
  470.   if Command = cmMaximize then S := 'cmmaximize' else
  471.   if Command = cmMinimize then S := 'cmminimize' else
  472.   if Command = cmSysMenu then S := 'cmsysmenu' else
  473.   if Command = cmDefault then S := 'cmdefault' else
  474.   S := 'cmrollup';
  475.   IniFile.WriteString(IDName, 'command', S);
  476.   WriteRect(IniFile, IDName, 'restorerect', RestoreRect);
  477.   WriteRect(IniFile, IDName, 'restoreactiverect', RestoreActiveRect);
  478.   WriteRect(IniFile, IDName, 'restoredownrect', RestoreDownRect);
  479. end;
  480. constructor TspDataSkinBitLabel.Create;
  481. begin
  482.   inherited;
  483.   TextValue := '';
  484.   Symbols := TStringList.Create;
  485.   SymbolWidth := 0;
  486.   SymbolHeight := 0;
  487. end;
  488. destructor TspDataSkinBitLabel.Destroy;
  489. begin
  490.   Symbols.Clear;
  491.   Symbols.Free;
  492.   inherited;
  493. end;
  494. procedure TspDataSkinBitLabel.LoadFromFile;
  495. begin
  496.   inherited;
  497.   Morphing := False;
  498.   TextValue := IniFile.ReadString(IDName, 'textvalue', '');
  499.   SymbolWidth := IniFile.ReadInteger(IDName, 'symbolwidth', 0);
  500.   SymbolHeight := IniFile.ReadInteger(IDName, 'symbolheight', 0);
  501.   ReadStrings(IniFile, IDName, 'symbols', Symbols);
  502. end;
  503. procedure TspDataSkinBitLabel.SaveToFile;
  504. begin
  505.   inherited;
  506.   IniFile.WriteString(IDName, 'textvalue', TextValue);
  507.   IniFile.WriteInteger(IDName, 'symbolwidth', SymbolWidth);
  508.   IniFile.WriteInteger(IDName, 'symbolheight', SymbolHeight);
  509.   WriteStrings(IniFile, IDName, 'symbols', Symbols);
  510. end;
  511. procedure TspDataSkinLabel.LoadFromFile;
  512. begin
  513.   inherited;
  514.   FontName := IniFile.ReadString(IDName, 'fontName', 'Arial');
  515.   FontHeight := IniFile.ReadInteger(IDName, 'fontheight', 14);
  516.   FontStyle := ReadFontStyles(IniFile, IDName, 'fontstyle');
  517.   FontColor := IniFile.ReadInteger(IDName, 'fontcolor', 0);
  518.   ActiveFontColor := IniFile.ReadInteger(IDName, 'activefontcolor', 0);
  519.   Alignment := ReadAlignment(IniFile, IDName, 'alignment');
  520.   TextValue := IniFile.ReadString(IDName, 'textvalue', '');
  521. end;
  522. procedure TspDataSkinLabel.SaveToFile;
  523. begin
  524.   inherited;
  525.   IniFile.WriteString(IDName, 'fontname', FontName);
  526.   IniFile.WriteInteger(IDName, 'fontheight', FontHeight);
  527.   WriteFontStyles(IniFile, IDName, 'fontstyle', FontStyle);
  528.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  529.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  530.   WriteAlignment(IniFile, IDName, 'alignment', Alignment);
  531.   IniFile.WriteString(IDName, 'textvalue', TextValue);
  532. end;
  533. procedure TspDataSkinCaption.SaveToFile;
  534. begin
  535.   inherited;
  536.   WriteBoolean(IniFile, IDName, 'defaultcaption', DefaultCaption);
  537.   WriteRect(IniFile, IDName, 'textrect', TextRct);
  538.   IniFile.WriteString(IDName, 'fontname', FontName);
  539.   IniFile.WriteInteger(IDName, 'fontheight', FontHeight);
  540.   WriteFontStyles(IniFile, IDName, 'fontstyle', FontStyle);
  541.   IniFile.WriteInteger(IDName, 'fontcolor', FontColor);
  542.   IniFile.WriteInteger(IDName, 'activefontcolor', ActiveFontColor);
  543.   WriteAlignment(IniFile, IDName, 'alignment', Alignment);
  544.   WriteBoolean(IniFile, IDName, 'shadow', Shadow);
  545.   IniFile.WriteInteger(IDName, 'shadowcolor', ShadowColor);
  546.   IniFile.WriteInteger(IDName, 'activeshadowcolor', ActiveShadowColor);
  547.   WriteRect(IniFile, IDName, 'framerect', FrameRect);
  548.   WriteRect(IniFile, IDName, 'activeframerect', ActiveFrameRect);
  549.   WriteRect(IniFile, IDName, 'frametextrect', FrameTextRect);
  550.   IniFile.WriteInteger(IDName, 'frameleftoffset', FrameLeftOffset);
  551.   IniFile.WriteInteger(IDName, 'framerightoffset', FrameRightOffset);
  552. end;
  553. procedure TspDataSkinCaption.LoadFromFile;
  554. begin
  555.   inherited;
  556.   DefaultCaption := ReadBoolean(IniFile, IDName, 'defaultcaption');
  557.   TextRct := ReadRect(IniFile, IDName, 'textrect');
  558.   FontName := IniFile.ReadString(IDName, 'fontname', 'Arial');
  559.   FontHeight := IniFile.ReadInteger(IDName, 'fontheight', 14);
  560.   FontStyle := ReadFontStyles(IniFile, IDName, 'fontstyle');
  561.   FontColor := IniFile.ReadInteger(IDName, 'fontcolor', 0);
  562.   ActiveFontColor := IniFile.ReadInteger(IDName, 'activefontcolor', 0);
  563.   Alignment := ReadAlignment(IniFile, IDName, 'alignment');
  564.   Shadow := ReadBoolean(IniFile, IDName, 'shadow');
  565.   ShadowColor := IniFile.ReadInteger(IDName, 'shadowcolor', 0);
  566.   ActiveShadowColor := IniFile.ReadInteger(IDName, 'activeshadowcolor', 0);
  567.   FrameRect := ReadRect(IniFile, IDName, 'framerect');
  568.   ActiveFrameRect := ReadRect(IniFile, IDName, 'activeframerect');
  569.   FrameTextRect := ReadRect(IniFile, IDName, 'frametextrect');
  570.   FrameLeftOffset := IniFile.ReadInteger(IDName, 'frameleftoffset', 0);
  571.   FrameRightOffset := IniFile.ReadInteger(IDName, 'framerightoffset', 0);
  572. end;
  573. constructor TspStoredSkin.Create;
  574. begin
  575.   inherited Create(AOwner);
  576.   FPicture := TBitMap.Create;
  577.   FMask := TBitMap.Create;
  578.   FRollUpPicture := TBitMap.Create;
  579.   FRollUpMask := TBitMap.Create;
  580.   FActivePictures := TList.Create;
  581.   FIniStrings := TStringList.Create;
  582.   FFileName := '';
  583. end;
  584. destructor TspStoredSkin.Destroy;
  585. begin
  586.   FPicture.Free;
  587.   FMask.Free;
  588.   FRollUpPicture.Free;
  589.   FRollUpMask.Free;
  590.   FIniStrings.Free;
  591.   ClearBitMaps;
  592.   FActivePictures.Free;
  593.   inherited;
  594. end;
  595. procedure TspStoredSkin.SetFileName;
  596. var
  597.   OD: TOpenDialog;
  598. begin
  599.   if (csDesigning in ComponentState) and not
  600.      (csLoading in ComponentState)
  601.   then
  602.     begin
  603.       OD := TOpenDialog.Create(Self);
  604.       if OD.Execute
  605.       then
  606.         begin
  607.           FFileName := ExtractFileName(OD.FileName);
  608.           LoadFromFile(OD.FileName);
  609.         end;
  610.       OD.Free;
  611.     end
  612.   else
  613.     FFileName := Value;    
  614. end;
  615. procedure TspStoredSkin.SetIniStrings;
  616. begin
  617.   FIniStrings.Assign(Value);
  618. end;
  619. procedure TspStoredSkin.ClearBitMaps;
  620. var
  621.   i, Count: Integer;
  622. begin
  623.   Count := FActivePictures.Count;
  624.   if Count > 0
  625.   then
  626.     for i := 0 to Count - 1 do
  627.     begin
  628.       TBitMap(FActivePictures.Items[i]).Free;
  629.     end;
  630.   FActivePictures.Clear;
  631. end;
  632. procedure TspStoredSkin.DefineProperties(Filer: TFiler);
  633. begin
  634.   inherited;
  635.   Filer.DefineBinaryProperty('Pictures', ReadData, WriteData, True);
  636. end;
  637. procedure TspStoredSkin.ReadData;
  638. var
  639.   IsEmpty: Boolean;
  640.   i, Count: Integer;
  641. begin
  642.   Reader.Read(IsEmpty, SizeOf(IsEmpty));
  643.   if IsEmpty
  644.   then FPicture.Assign(nil)
  645.   else FPicture.LoadFromStream(Reader);
  646.   Reader.Read(IsEmpty, SizeOf(IsEmpty));
  647.   if IsEmpty
  648.   then FMask.Assign(nil)
  649.   else FMask.LoadFromStream(Reader);
  650.   Reader.Read(IsEmpty, SizeOf(IsEmpty));
  651.   if IsEmpty
  652.   then FRollUpPicture.Assign(nil)
  653.   else FRollUpPicture.LoadFromStream(Reader);
  654.   Reader.Read(IsEmpty, SizeOf(IsEmpty));
  655.   if IsEmpty
  656.   then FRollUpMask.Assign(nil)
  657.   else FRollUpMask.LoadFromStream(Reader);
  658.   ClearBitMaps;
  659.   Reader.Read(Count, SizeOf(Count));
  660.   if Count > 0
  661.   then
  662.     for i := 0 to Count - 1 do
  663.     begin
  664.       FActivePictures.Add(TBitMap.Create);
  665.       TBitMap(FActivePictures.Items[i]).LoadFromStream(Reader);
  666.     end;
  667. end;
  668. procedure TspStoredSkin.WriteData;
  669. var
  670.   IsEmpty: Boolean;
  671.   i, Count: Integer;
  672. begin
  673.   IsEmpty := FPicture.Empty;
  674.   Writer.Write(IsEmpty, SizeOf(IsEmpty));
  675.   if not IsEmpty then FPicture.SaveToStream(Writer);
  676.   IsEmpty := FMask.Empty;
  677.   Writer.Write(IsEmpty, SizeOf(IsEmpty));
  678.   if not IsEmpty then FMask.SaveToStream(Writer);
  679.   IsEmpty := FRollUpPicture.Empty;
  680.   Writer.Write(IsEmpty, SizeOf(IsEmpty));
  681.   if not IsEmpty then FRollUpPicture.SaveToStream(Writer);
  682.   IsEmpty := FRollUpMask.Empty;
  683.   Writer.Write(IsEmpty, SizeOf(IsEmpty));
  684.   if not IsEmpty then FRollUpMask.SaveToStream(Writer);
  685.   Count := FActivePictures.Count;
  686.   Writer.Write(Count, SizeOf(Count));
  687.   if Count > 0
  688.   then
  689.     for i := 0 to Count - 1 do
  690.     begin
  691.       TBitMap(FActivePictures.Items[i]).SaveToStream(Writer);
  692.     end;
  693. end;
  694. procedure TspStoredSkin.LoadFromFile;
  695. var
  696.   F: TMemIniFile;
  697.   PNames: TStrings;
  698.   PName, Path: String;
  699.   i: Integer;
  700. begin
  701.   FIniStrings.Clear;
  702.   FIniStrings.LoadFromFile(AFileName);
  703.   Path := ExtractFilePath(AFileName);
  704.   F := TMemIniFile.Create(FileName);
  705.   // load base pictures
  706.   PName := F.ReadString('PICTURES', 'picture', '');
  707.   if PName <> ''
  708.   then
  709.     begin
  710.       if IsJPegFile(PName)
  711.       then
  712.         LoadFromJpegFile(FPicture, Path + PName)
  713.       else
  714.         FPicture.LoadFromFile(Path + PName);
  715.     end
  716.   else FPicture.Assign(nil);
  717.   PName := F.ReadString('PICTURES', 'mask', '');
  718.   if PName <> ''
  719.   then
  720.     begin
  721.       if IsJPegFile(PName)
  722.       then
  723.         LoadFromJpegFile(FMask, Path + PName)
  724.       else
  725.         FMask.LoadFromFile(Path + PName);
  726.     end
  727.   else FMask.Assign(nil);
  728.   PName := F.ReadString('PICTURES', 'rolluppicture', '');
  729.   if PName <> ''
  730.   then
  731.     begin
  732.       if IsJPegFile(PName)
  733.       then
  734.         LoadFromJpegFile(FRollUpPicture, Path + PName)
  735.       else
  736.         FRollUpPicture.LoadFromFile(Path + PName);
  737.     end
  738.   else FRollUpPicture.Assign(nil);
  739.   PName := F.ReadString('PICTURES', 'rollupmask', '');
  740.   if PName <> ''
  741.   then
  742.     begin
  743.       if IsJPegFile(PName)
  744.       then
  745.         LoadFromJpegFile(FRollUpMask, Path + PName)
  746.       else
  747.         FRollUpMask.LoadFromFile(Path + PName);
  748.     end
  749.   else FRollUpMask.Assign(nil);
  750.   // load activepictures
  751.   PNames := TStringList.Create;
  752.   ReadStrings1(F, 'PICTURES', 'activepictures', PNames);
  753.   ClearBitMaps;
  754.   for i := 0 to PNames.Count - 1 do
  755.   begin
  756.     FActivePictures.Add(TBitMap.Create);
  757.     if IsJpegFile(PNames[i])
  758.     then
  759.       LoadFromJPegFile(TBitMap(FActivePictures.Items[i]), Path + PNames[i])
  760.     else
  761.       TBitMap(FActivePictures.Items[i]).LoadFromFile(Path + PNames[i]);
  762.   end;
  763.   PNames.Free;
  764.   //
  765.   F.Free;
  766. end;
  767. constructor TspSkinData.Create(AOwner: TComponent);
  768. begin
  769.   inherited Create(AOwner);
  770.   FStoredSkin := nil;
  771.   ObjectList := TList.Create;
  772.   CtrlList := TList.Create;
  773.   AreaList := TList.Create;
  774.   FActivePictures := TList.Create;
  775.   FPicture := TBitMap.Create;
  776.   FMask := TBitMap.Create;
  777.   FRollUpPicture := TBitMap.Create;
  778.   FRollUpMask := TBitMap.Create;
  779.   FPictureName := '';
  780.   FMaskName := '';
  781.   FRollUpPictureName := '';
  782.   FRollUpMaskName := '';
  783.   FActivePicturesNames := TStringList.Create;
  784.   FCursorsNames := TStringList.Create;
  785.   Names := TStringList.Create;
  786.   SkinName := '';
  787.   Empty := True;
  788.   PopupWindow := TspDataSkinPopupWindow.Create;
  789.   HintWindow := TspDataSkinHintWindow.Create;
  790.   MainMenuPopupUp := False;
  791.   BuildMode := False;
  792.   StartCursorIndex := 1;
  793.   CursorIndex := -1;
  794.   BGPictureIndex := -1;
  795. end;
  796. destructor TspSkinData.Destroy;
  797. begin
  798.   Empty := True;
  799.   ClearObjects;
  800.   ObjectList.Free;
  801.   CtrlList.Free;
  802.   AreaList.Free;
  803.   FActivePictures.Free;
  804.   FPicture.Free;
  805.   FMask.Free;
  806.   FRollUpPicture.Free;
  807.   FRollUpMask.Free;
  808.   FActivePicturesNames.Free;
  809.   FCursorsNames.Free;
  810.   Names.Free;
  811.   PopupWindow.Free;
  812.   HintWindow.Free;
  813.   inherited Destroy;
  814. end;
  815. procedure TspSkinData.Notification;
  816. begin
  817.   inherited Notification(AComponent, Operation);
  818.   if (Operation = opRemove) and (AComponent = FStoredSkin)
  819.   then FStoredSkin := nil;
  820.   if (Operation = opRemove) and (AComponent = FCompressedStoredSkin)
  821.   then FCompressedStoredSkin := nil;
  822. end;
  823. procedure TspSkinData.SetCompressedStoredSkin;
  824. begin
  825.   FCompressedStoredSkin := Value;
  826.   if not (csDesigning in ComponentState) and (FCompressedStoredSkin <> nil)
  827.   then
  828.     LoadCompressedStoredSkin(FCompressedStoredSkin);
  829. end;
  830. procedure TspSkinData.SetStoredSkin;
  831. begin
  832.   FStoredSkin := Value;
  833.   if not (csDesigning in ComponentState) and (FStoredSkin <> nil)
  834.   then
  835.     LoadStoredSkin(FStoredSkin);
  836. end;
  837. procedure TspSkinData.LoadNames;
  838. var
  839.   i: Integer;
  840. begin
  841.   Names.Clear;
  842.   for i := 0 to ObjectList.Count - 1 do
  843.     Names.Add(TspDataSkinObject(ObjectList.Items[i]).IDName);
  844.   for i := 0 to CtrlList.Count - 1 do
  845.     Names.Add(TspDataSkinControl(CtrlList.Items[i]).IDName);
  846. end;
  847. procedure TspSkinData.EraseSections;
  848. var
  849.   i: Integer;
  850. begin
  851.   if Names.Count = 0 then Exit;
  852.   for i := 0 to Names.Count - 1 do
  853.     F.EraseSection(Names[i]);
  854. end;
  855. procedure TspSkinData.SendSkinDataMessage;
  856. var
  857.   i: Integer;
  858.   F: TForm;
  859. begin
  860.   F := TForm(Owner);
  861.   SendMessage(F.Handle, M, Integer(Self), 1000);
  862.   with Screen do
  863.    for i := 0 to FormCount - 1 do
  864.      if Forms[i] <> F
  865.      then
  866.        SendMessage(Forms[i].Handle, M, Integer(Self), 1000);
  867. end;
  868. function TspSkinData.GetAreaIndex;
  869. var
  870.   i: Integer;
  871. begin
  872.   Result := -1;
  873.   for i := 0 to AreaList.Count - 1 do
  874.   begin
  875.     if AIDName = TspDataSkinArea(AreaList.Items[i]).IDName
  876.     then
  877.       begin
  878.         Result := i;
  879.         Break;
  880.       end;
  881.   end;
  882. end;  
  883. function TspSkinData.GetIndex;
  884. var
  885.   i: Integer;
  886. begin
  887.   Result := -1;
  888.   for i := 0 to ObjectList.Count - 1 do
  889.   begin
  890.     if AIDName = TspDataSkinObject(ObjectList.Items[i]).IDName
  891.     then
  892.       begin
  893.         Result := i;
  894.         Break;
  895.       end;
  896.   end;
  897. end;
  898. function TspSkinData.GetControlIndex;
  899. var
  900.   i: Integer;
  901. begin
  902.   Result := -1;
  903.   for i := 0 to CtrlList.Count - 1 do
  904.   begin
  905.     if AIDName = TspDataSkinControl(CtrlList.Items[i]).IDName
  906.     then
  907.       begin
  908.         Result := i;
  909.         Break;
  910.       end;
  911.   end;
  912. end;
  913. procedure TspSkinData.ClearObjects;
  914. var
  915.   i: Integer;
  916. begin
  917.   for i := 0 to AreaList.Count - 1 do
  918.     TspDataSkinArea(AreaList.Items[i]).Free;
  919.   AreaList.Clear;
  920.   for i := 0 to ObjectList.Count - 1 do
  921.     TspDataSkinObject(ObjectList.Items[i]).Free;
  922.   ObjectList.Clear;
  923.   for i := 0 to CtrlList.Count - 1 do
  924.     TspDataSkinControl(CtrlList.Items[i]).Free;
  925.   CtrlList.Clear;
  926.   for i := 0 to FActivePictures.Count - 1 do
  927.     TBitMap(FActivePictures.Items[i]).Free;
  928.   PopupWindow.WindowPictureIndex := -1;
  929.   HintWindow.WindowPictureIndex := -1;
  930.   FCursorsNames.Clear;
  931.   FActivePictures.Clear;
  932.   FActivePicturesNames.Clear;
  933.   FCursorsNames.Clear;
  934. end;
  935. procedure TspSkinData.ClearAll;
  936. begin
  937.   ClearObjects;
  938.   FPicture.Assign(nil);
  939.   FMask.Assign(nil);
  940.   FRollUpPicture.Assign(nil);
  941.   FRollUpMask.Assign(nil);
  942.   FPictureName := '';
  943.   FMaskName := '';
  944.   FRollUpPictureName := '';
  945.   FRollUpMaskName := '';
  946.   Empty := True;
  947. end;
  948. const
  949.   symbols = ',: ';
  950. procedure TspSkinData.GetObjectTypeName(S: String; var AName, AType: String);
  951. var
  952.   i, j: Integer;
  953. begin
  954.   AName := '';
  955.   AType := '';
  956.   j := 0;
  957.   for i := 1 to Length(S) do
  958.     if S[i] = ':'
  959.     then
  960.       begin
  961.         j := i;
  962.         Break;
  963.       end;
  964.   if j <> 0
  965.   then
  966.     begin
  967.       AName := Copy(S, 1, j - 1);
  968.       AType := Copy(S, j + 1, Length(S) - j);
  969.     end;  
  970. end;
  971. procedure TspSkinData.GetAreaNameRect(S: String; var AName: String; var ARect: TRect);
  972. var
  973.   i, j: Integer;
  974.   ARectStr: String;
  975. begin
  976.   AName := '';
  977.   ARectStr := '';
  978.   j := 0;
  979.   for i := 1 to Length(S) do
  980.     if S[i] = ':'
  981.     then
  982.       begin
  983.         j := i;
  984.         Break;
  985.       end;
  986.   if j <> 0
  987.   then
  988.     begin
  989.       AName := Copy(S, 1, j - 1);
  990.       ARectStr := Copy(S, j + 1, Length(S) - j);
  991.       ARect := GetRect(ARectStr);
  992.     end;
  993. end;
  994. procedure TspSkinData.AddSkinArea;
  995. begin
  996.   AreaList.Add(TspDataSkinArea.Create(AName, ARect));
  997. end;
  998. procedure TspSkinData.WriteAreas(F: TCustomIniFile);
  999. var
  1000.   S: String;
  1001.   i: Integer;
  1002. begin
  1003.   F.EraseSection('SKINAREAS');
  1004.   F.WriteInteger('SKINAREAS', 'count', AreaList.Count);
  1005.   for i := 0 to AreaList.Count - 1 do
  1006.   with TspDataSkinArea(AreaList.Items[i]) do
  1007.   begin
  1008.     S := IDName + ':' + SetRect(AreaRect);
  1009.     F.WriteString('SKINAREAS', IntToStr(i), S);
  1010.   end;
  1011. end;
  1012. procedure TspSkinData.ReadAreas(F: TCustomIniFile);
  1013. var
  1014.   i, Count: Integer;
  1015.   S, FName: String;
  1016.   FRect: TRect;
  1017. begin
  1018.   Count := F.ReadInteger('SKINAREAS', 'count', 0);
  1019.   for i := 0 to Count - 1 do
  1020.   begin
  1021.     S := F.ReadString('SKINAREAS', IntToStr(i), '');
  1022.     GetAreaNameRect(S, FName, FRect);
  1023.     AddSkinArea(FName, FRect);
  1024.   end;
  1025. end;
  1026. procedure TspSkinData.WriteObjects;
  1027. var
  1028.   i: Integer;
  1029.   S: String;
  1030. begin
  1031.   F.EraseSection('SKINOBJECTS');
  1032.   F.WriteInteger('SKINOBJECTS', 'count', ObjectList.Count);
  1033.   for i := 0 to ObjectList.Count - 1 do
  1034.   begin
  1035.     S := TspDataSkinObject(ObjectList.Items[i]).IDName + ':';
  1036.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinMenuItem
  1037.     then S := S + 'menuitem' else
  1038.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinMainMenuBarItem
  1039.     then S := S + 'mainmenubaritem' else
  1040.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinMainMenuItem
  1041.     then S := S + 'mainmenuitem' else
  1042.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinMainMenuBarButton
  1043.     then S := S + 'mainmenubarbutton' else
  1044.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinStdButton
  1045.     then S := S + 'stdbutton' else
  1046.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinButton
  1047.     then S := S + 'button' else
  1048.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinCaption
  1049.     then S := S + 'caption' else
  1050.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinTrackBar
  1051.     then S := S + 'trackbar' else
  1052.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinGauge
  1053.     then S := S + 'gauge' else
  1054.      if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinFrameGaugeObject
  1055.     then S := S + 'framegauge' else
  1056.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinFrameRegulatorObject
  1057.     then S := S + 'frameregulator' else
  1058.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinLabel
  1059.     then S := S + 'label' else
  1060.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinBitLabel
  1061.     then S := S + 'bitlabel' else
  1062.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinSwitch
  1063.     then S := S + 'switch' else
  1064.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataSkinAnimate
  1065.     then S := S + 'animate' else
  1066.     if TspDataSkinObject(ObjectList.Items[i]) is TspDataUserObject
  1067.     then S := S + 'userobject';
  1068.     F.WriteString('SKINOBJECTS', IntToStr(i), S);
  1069.     TspDataSkinObject(ObjectList.Items[i]).SaveToFile(F);
  1070.   end;
  1071. end;
  1072. procedure TspSkinData.WriteCtrls(F: TCustomIniFile);
  1073. var
  1074.   i: Integer;
  1075.   S: String;
  1076. begin
  1077.   F.EraseSection('SKINCONTROLS');
  1078.   F.WriteInteger('SKINCONTROLS', 'count', CtrlList.Count);
  1079.   for i := 0 to CtrlList.Count - 1 do
  1080.   begin
  1081.     S := TspDataSkinControl(CtrlList.Items[i]).IDName + ':';
  1082.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinSlider
  1083.     then S := S + 'slider'
  1084.     else
  1085.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinBevel
  1086.     then S := S + 'bevel'
  1087.     else
  1088.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinPanelControl
  1089.     then S := S + 'panel'
  1090.     else
  1091.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinExPanelControl
  1092.     then S := S + 'expanel'
  1093.     else
  1094.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinMenuButtonControl
  1095.     then S := S + 'menubutton'
  1096.     else
  1097.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinButtonControl
  1098.     then S := S + 'button'
  1099.     else
  1100.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinCheckRadioControl
  1101.     then S := S + 'checkradio'
  1102.     else
  1103.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinGaugeControl
  1104.     then S := S + 'gauge'
  1105.     else
  1106.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinSplitterControl
  1107.     then S := S + 'splitter'
  1108.     else
  1109.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinTrackBarControl
  1110.     then S := S + 'trackbar'
  1111.     else
  1112.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinLabelControl
  1113.     then S := S + 'label'
  1114.     else
  1115.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinStdLabelControl
  1116.     then S := S + 'stdlabel'
  1117.     else
  1118.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinBitLabelControl
  1119.     then S := S + 'bitlabel'
  1120.     else
  1121.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinFrameRegulator
  1122.     then S := S + 'frameregulator'
  1123.     else
  1124.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinFrameGauge
  1125.     then S := S + 'framegauge'
  1126.     else
  1127.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinAnimateControl
  1128.     then S := S + 'animate'
  1129.     else
  1130.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinUpDownControl
  1131.     then S := S + 'updown'
  1132.     else
  1133.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinSwitchControl
  1134.     then S := S + 'switch'
  1135.     else
  1136.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinGridControl
  1137.     then S := S + 'grid'
  1138.     else
  1139.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinTabControl
  1140.     then S := S + 'tab'
  1141.     else
  1142.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinMainMenuBar
  1143.     then S := S + 'mainmenubar'
  1144.     else
  1145.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinControlBar
  1146.     then S := S + 'controlbar'
  1147.     else
  1148.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinMemoControl
  1149.     then S := S + 'memo'
  1150.     else
  1151.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinEditControl
  1152.     then S := S + 'edit'
  1153.     else
  1154.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinCheckListBox
  1155.     then S := S + 'checklistbox'
  1156.     else
  1157.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinListBox
  1158.     then S := S + 'listbox'
  1159.     else
  1160.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinComboBox
  1161.     then S := S + 'combobox'
  1162.     else
  1163.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinScrollBarControl
  1164.     then S := S + 'scrollbar'
  1165.     else
  1166.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinSpinEditControl
  1167.     then S := S + 'spinedit'
  1168.     else
  1169.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinScrollBoxControl
  1170.     then S := S + 'scrollbox'
  1171.     else
  1172.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinTreeView
  1173.     then S := S + 'treeview'
  1174.     else
  1175.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinListView
  1176.     then S := S + 'listview'
  1177.     else
  1178.     if TspDataSkinControl(CtrlList.Items[i]) is TspDataSkinRichEdit
  1179.     then S := S + 'richedit';
  1180.     F.WriteString('SKINCONTROLS', IntToStr(i), S);
  1181.     TspDataSkinControl(CtrlList.Items[i]).SaveToFile(F);
  1182.   end;
  1183. end;
  1184. procedure TspSkinData.ReadCtrls(F: TCustomIniFile);
  1185. var
  1186.   i, Count: Integer;
  1187.   S, FName, FType: String;
  1188. begin
  1189.   Count := F.ReadInteger('SKINCONTROLS', 'count', 0);
  1190.   for i := 0 to Count - 1 do
  1191.   begin
  1192.     S := F.ReadString('SKINCONTROLS', IntToStr(i), '');
  1193.     GetObjectTypeName(S, FName, FType);
  1194.     if FType = 'slider'
  1195.     then CtrlList.Add(TspDataSkinSlider.Create(FName))
  1196.     else
  1197.     if FType = 'bevel'
  1198.     then CtrlList.Add(TspDataSkinBevel.Create(FName))
  1199.     else
  1200.     if FType = 'panel'
  1201.     then CtrlList.Add(TspDataSkinPanelControl.Create(FName))
  1202.     else
  1203.     if FType = 'expanel'
  1204.     then CtrlList.Add(TspDataSkinExPanelControl.Create(FName))
  1205.     else
  1206.     if FType = 'menubutton'
  1207.     then CtrlList.Add(TspDataSkinMenuButtonControl.Create(FName))
  1208.     else
  1209.     if FType = 'button'
  1210.     then CtrlList.Add(TspDataSkinButtonControl.Create(FName))
  1211.     else
  1212.     if FType = 'checkradio'
  1213.     then CtrlList.Add(TspDataSkinCheckRadioControl.Create(FName))
  1214.     else
  1215.     if FType = 'gauge'
  1216.     then CtrlList.Add(TspDataSkinGaugeControl.Create(FName))
  1217.     else
  1218.     if FType = 'splitter'
  1219.     then CtrlList.Add(TspDataSkinSplitterControl.Create(FName))
  1220.     else
  1221.     if FType = 'trackbar'
  1222.     then CtrlList.Add(TspDataSkinTrackBarControl.Create(FName))
  1223.     else
  1224.     if FType = 'label'
  1225.     then CtrlList.Add(TspDataSkinLabelControl.Create(FName))
  1226.     else
  1227.     if FType = 'stdlabel'
  1228.     then CtrlList.Add(TspDataSkinStdLabelControl.Create(FName))
  1229.     else
  1230.     if FType = 'bitlabel'
  1231.     then CtrlList.Add(TspDataSkinBitLabelControl.Create(FName))
  1232.     else
  1233.     if FType = 'frameregulator'
  1234.     then CtrlList.Add(TspDataSkinFrameRegulator.Create(FName))
  1235.     else
  1236.     if FType = 'framegauge'
  1237.     then CtrlList.Add(TspDataSkinFrameGauge.Create(FName))
  1238.     else
  1239.     if FType = 'animate'
  1240.     then CtrlList.Add(TspDataSkinAnimateControl.Create(FName))
  1241.     else
  1242.     if FType = 'updown'
  1243.     then CtrlList.Add(TspDataSkinUpDownControl.Create(FName))
  1244.     else
  1245.     if FType = 'switch'
  1246.     then CtrlList.Add(TspDataSkinSwitchControl.Create(FName))
  1247.     else
  1248.     if FType = 'grid'
  1249.     then CtrlList.Add(TspDataSkinGridControl.Create(FName))
  1250.     else
  1251.     if FType = 'tab'
  1252.     then CtrlList.Add(TspDataSkinTabControl.Create(FName))
  1253.     else
  1254.     if FType = 'mainmenubar'
  1255.     then CtrlList.Add(TspDataSkinMainMenuBar.Create(FName))
  1256.     else
  1257.     if FType = 'controlbar'
  1258.     then CtrlList.Add(TspDataSkinControlBar.Create(FName))
  1259.     else
  1260.     if FType = 'memo'
  1261.     then CtrlList.Add(TspDataSkinMemoControl.Create(FName))
  1262.     else
  1263.     if FType = 'edit'
  1264.     then CtrlList.Add(TspDataSkinEditControl.Create(FName))
  1265.     else
  1266.     if FType = 'checklistbox'
  1267.     then CtrlList.Add(TspDataSkinCheckListBox.Create(FName))
  1268.     else
  1269.     if FType = 'listbox'
  1270.     then CtrlList.Add(TspDataSkinListBox.Create(FName))
  1271.     else
  1272.     if FType = 'combobox'
  1273.     then CtrlList.Add(TspDataSkinComboBox.Create(FName))
  1274.     else
  1275.     if FType = 'scrollbar'
  1276.     then CtrlList.Add(TspDataSkinScrollBarControl.Create(FName))
  1277.     else
  1278.     if FType = 'spinedit'
  1279.     then CtrlList.Add(TspDataSkinSpinEditControl.Create(FName))
  1280.     else
  1281.     if FType = 'scrollbox'
  1282.     then CtrlList.Add(TspDataSkinScrollBoxControl.Create(FName))
  1283.     else
  1284.     if FType = 'treeview'
  1285.     then CtrlList.Add(TspDataSkinTreeView.Create(FName))
  1286.     else
  1287.     if FType = 'listview'
  1288.     then CtrlList.Add(TspDataSkinListView.Create(FName))
  1289.     else
  1290.     if FType = 'richedit'
  1291.     then CtrlList.Add(TspDataSkinRichEdit.Create(FName));
  1292.     TspDataSkinControl(CtrlList[CtrlList.Count - 1]).LoadFromFile(F);
  1293.   end;
  1294. end;
  1295. procedure TspSkinData.WriteActivePictures;
  1296. begin
  1297.   WriteStrings1(F, 'PICTURES', 'activepictures', FActivePicturesNames);
  1298. end;
  1299. procedure TspSkinData.WriteCursors;
  1300. begin
  1301.   F.WriteInteger('CURSORS', 'startcursorindex', StartCursorIndex);
  1302.   WriteStrings1(F, 'CURSORS', 'cursors', FCursorsNames);
  1303. end;
  1304. procedure TspSkinData.ReadActivePictures;
  1305. var
  1306.   i: Integer;
  1307. begin
  1308.   ReadStrings1(F, 'PICTURES', 'activepictures', FActivePicturesNames);
  1309.   for i := 0 to FActivePicturesNames.Count - 1 do
  1310.   begin
  1311.     FActivePictures.Add(TBitMap.Create);
  1312.     if IsJpegFile(FActivePicturesNames[i])
  1313.     then
  1314.       LoadFromJPegFile(TBitMap(FActivePictures.Items[i]), Path + FActivePicturesNames[i])
  1315.     else
  1316.       TBitMap(FActivePictures.Items[i]).LoadFromFile(Path + FActivePicturesNames[i]);
  1317.   end;
  1318. end;
  1319. procedure TspSkinData.ReadCursors;
  1320. var
  1321.   i: Integer;
  1322.   CN: PChar;
  1323. begin
  1324.   StartCursorIndex := F.ReadInteger('CURSORS', 'startcursorindex', 1);
  1325.   if StartCursorIndex < 1 then StartCursorIndex := 1;
  1326.   ReadStrings1(F, 'CURSORS', 'cursors', FCursorsNames);
  1327.   if not BuildMode and (FCursorsNames.Count <> 0)
  1328.   then
  1329.     begin
  1330.       for i := StartCursorIndex to StartCursorIndex + FCursorsNames.Count - 1 do
  1331.       begin
  1332.         CN := PChar(Path + FCursorsNames[i - StartCursorIndex]);
  1333.         Screen.Cursors[i] := LoadCursorFromFile(CN);
  1334.       end;
  1335.     end;
  1336. end;
  1337. procedure TspSkinData.ReadObjects;
  1338. var
  1339.   i, Count: Integer;
  1340.   S, FName, FType: String;
  1341. begin
  1342.   Count := F.ReadInteger('SKINOBJECTS', 'count', 0);
  1343.   for i := 0 to Count - 1 do
  1344.   begin
  1345.     S := F.ReadString('SKINOBJECTS', IntToStr(i), '');
  1346.     GetObjectTypeName(S, FName, FType);
  1347.     if FType = 'menuitem'
  1348.     then ObjectList.Add(TspDataSkinMenuItem.Create(FName)) else
  1349.     if FType = 'mainmenubaritem'
  1350.     then ObjectList.Add(TspDataSkinMainMenuBarItem.Create(FName)) else
  1351.     if FType = 'mainmenuitem'
  1352.     then ObjectList.Add(TspDataSkinMainMenuItem.Create(FName)) else
  1353.     if FType = 'stdbutton'
  1354.     then ObjectList.Add(TspDataSkinStdButton.Create(FName)) else
  1355.     if FType = 'mainmenubarbutton'
  1356.     then ObjectList.Add(TspDataSkinMainMenuBarButton.Create(FName)) else
  1357.     if FType = 'button'
  1358.     then ObjectList.Add(TspDataSkinButton.Create(FName)) else
  1359.     if FType = 'caption'
  1360.     then ObjectList.Add(TspDataSkinCaption.Create(FName)) else
  1361.     if FType = 'trackbar'
  1362.     then ObjectList.Add(TspDataSkinTrackBar.Create(FName)) else
  1363.     if FType = 'gauge'
  1364.     then ObjectList.Add(TspDataSkinGauge.Create(FName)) else
  1365.     if FType = 'framegauge'
  1366.     then ObjectList.Add(TspDataSkinFrameGaugeObject.Create(FName))
  1367.     else
  1368.     if FType = 'frameregulator'
  1369.     then ObjectList.Add(TspDataSkinFrameRegulatorObject.Create(FName)) else
  1370.     if FType = 'label'
  1371.     then ObjectList.Add(TspDataSkinLabel.Create(FName)) else
  1372.     if FType = 'bitlabel'
  1373.     then ObjectList.Add(TspDataSkinBitLabel.Create(FName)) else
  1374.     if FType = 'switch'
  1375.     then ObjectList.Add(TspDataSkinSwitch.Create(FName)) else
  1376.     if FType = 'animate'
  1377.     then ObjectList.Add(TspDataSkinAnimate.Create(FName)) else
  1378.     if FType = 'userobject'
  1379.     then ObjectList.Add(TspDataUserObject.Create(FName));
  1380.     TspDataSkinObject(ObjectList[ObjectList.Count - 1]).LoadFromFile(F);
  1381.   end;
  1382. end;
  1383. procedure TspSkinData.AddBitMap(FileName: String);
  1384. begin
  1385.   FActivePicturesNames.Add(ExtractFileName(FileName));
  1386.   FActivePictures.Add(TBitMap.Create);
  1387.   if IsJPegFile(ExtractFileName(FileName))
  1388.   then
  1389.     LoadFromJpegFile(TBitMap(FActivePictures.Items[FActivePictures.Count - 1]),
  1390.                      FileName)
  1391.   else
  1392.     TBitMap(FActivePictures.Items[FActivePictures.Count - 1]).LoadFromFile(FileName);
  1393. end;
  1394. procedure TspSkinData.DeleteBitMap(Index: Integer);
  1395. begin
  1396.   FActivePicturesNames.Delete(Index);
  1397.   TBitMap(FActivePictures.Items[Index]).Free;
  1398.   FActivePictures.Delete(Index);
  1399. end;
  1400. procedure TspSkinData.WriteFormInfo;
  1401. begin
  1402.   WritePoint(F, 'FORMINFO', 'lefttoppoint', LTPoint);
  1403.   Writepoint(F, 'FORMINFO', 'righttoppoint', RTPoint);
  1404.   WritePoint(F, 'FORMINFO', 'leftbottompoint', LBPoint);
  1405.   WritePoint(F, 'FORMINFO', 'rightbottompoint', RBPoint);
  1406.   WriteRect(F, 'FORMINFO', 'clientrect', ClRect);
  1407.   F.WriteInteger('FORMINFO', 'bgpictureindex', BGPictureIndex);
  1408.   WriteRect(F, 'FORMINFO', 'maskrectarea', MaskRectArea);
  1409.   //
  1410.   WriteRect(F, 'FORMINFO', 'buttonsrect', ButtonsRect);
  1411.   WriteRect(F, 'FORMINFO', 'captionrect', CaptionRect);
  1412.   F.WriteInteger('FORMINFO', 'buttonsoffset', ButtonsOffset);
  1413.   WriteBoolean(F, 'FORMINFO', 'buttonsinleft', CapButtonsInLeft);
  1414.   //
  1415.   WritePoint(F, 'FORMINFO', 'hittestlefttoppoint', HitTestLTPoint);
  1416.   WritePoint(F, 'FORMINFO', 'hittestrighttoppoint', HitTestRTPoint);
  1417.   WritePoint(F, 'FORMINFO', 'hittestleftbottompoint', HitTestLBPoint);
  1418.   WritePoint(F, 'FORMINFO', 'hittestrightbottompoint', HitTestRBPoint);
  1419.   //
  1420.   WritePoint(F, 'FORMINFO', 'rollupleftpoint', RollUpLeftPoint);
  1421.   WritePoint(F, 'FORMINFO', 'rolluprightpoint', RollUpRightPoint);
  1422.   //
  1423.   WriteRect(F, 'FORMINFO', 'mainmenurect', MainMenuRect);
  1424.   WriteRect(F, 'FORMINFO', 'iconrect', IconRect);
  1425.   WriteBoolean(F, 'FORMINFO', 'mainmenupopupup', MainMenuPopupUp);
  1426.   F.WriteInteger('FORMINFO', 'borderwidth', BorderW);
  1427.   F.WriteInteger('FORMINFO', 'cursorindex', CursorIndex);
  1428.   WriteBoolean(F, 'FORMINFO', 'autorenderinginactiveimage', AutoRenderingInActiveImage);
  1429.   WriteInActiveEffect(F, 'FORMINFO', 'inactiveeffect', InActiveEffect);
  1430. end;
  1431. procedure TspSkinData.ReadFormInfo;
  1432. begin
  1433.   LTPoint := ReadPoint(F, 'FORMINFO', 'lefttoppoint');
  1434.   RTPoint := Readpoint(F, 'FORMINFO', 'righttoppoint');
  1435.   LBPoint := ReadPoint(F, 'FORMINFO', 'leftbottompoint');
  1436.   RBPoint := ReadPoint(F, 'FORMINFO', 'rightbottompoint');
  1437.   ClRect := ReadRect(F, 'FORMINFO', 'clientrect');
  1438.   BGPictureIndex := F.ReadInteger('FORMINFO', 'bgpictureindex', -1);
  1439.   //
  1440.   ButtonsRect := ReadRect(F, 'FORMINFO', 'buttonsrect');
  1441.   CaptionRect := ReadRect(F, 'FORMINFO', 'captionrect');
  1442.   ButtonsOffset := F.ReadInteger('FORMINFO', 'buttonsoffset', 0);
  1443.   CapButtonsInLeft := ReadBoolean(F, 'FORMINFO', 'buttonsinleft');
  1444.   //
  1445.   MaskRectArea := ReadRect(F, 'FORMINFO', 'maskrectarea');
  1446.   HitTestLTPoint := ReadPoint(F, 'FORMINFO', 'hittestlefttoppoint');
  1447.   HitTestRTPoint := ReadPoint(F, 'FORMINFO', 'hittestrighttoppoint');
  1448.   HitTestLBPoint := ReadPoint(F, 'FORMINFO', 'hittestleftbottompoint');
  1449.   HitTestRBPoint := ReadPoint(F, 'FORMINFO', 'hittestrightbottompoint');
  1450.   //
  1451.   RollUpLeftPoint := ReadPoint(F, 'FORMINFO', 'rollupleftpoint');
  1452.   RollUpRightPoint := ReadPoint(F, 'FORMINFO', 'rolluprightpoint');
  1453.   //
  1454.   if FMaskName <> ''
  1455.   then
  1456.     begin
  1457.       if isNullRect(MaskRectArea)
  1458.       then
  1459.         MaskRectArea := ClRect
  1460.       else
  1461.         begin
  1462.           if MaskRectArea.Left > ClRect.Left
  1463.           then MaskRectArea.Left := ClRect.Left;
  1464.           if MaskRectArea.Top > ClRect.Top
  1465.           then MaskRectArea.Top := ClRect.Top;
  1466.           if MaskRectArea.Right < ClRect.Right
  1467.           then MaskRectArea.Right := ClRect.Right;
  1468.           if MaskRectArea.Bottom < ClRect.Bottom
  1469.           then MaskRectArea.Bottom := ClRect.Bottom;
  1470.         end;
  1471.       if isNullPoint(HitTestLTPoint) then  HitTestLTPoint := LTPoint;
  1472.       if isNullPoint(HitTestRTPoint) then  HitTestRTPoint := RTPoint;
  1473.       if isNullPoint(HitTestLBPoint) then  HitTestLBPoint := LBPoint;
  1474.       if isNullPoint(HitTestRBPoint) then  HitTestRBPoint := RBPoint;
  1475.     end;
  1476.   //
  1477.   MainMenuRect := ReadRect(F, 'FORMINFO', 'mainmenurect');
  1478.   IconRect := ReadRect(F, 'FORMINFO', 'iconrect');
  1479.   MainMenuPopupUp := ReadBoolean(F, 'FORMINFO', 'mainmenupopupup');
  1480.   BorderW := F.ReadInteger('FORMINFO', 'borderwidth', 0);
  1481.   CursorIndex := F.ReadInteger('FORMINFO', 'cursorindex', -1);
  1482.   AutoRenderingInActiveImage := ReadBoolean(F, 'FORMINFO', 'autorenderinginactiveimage');
  1483.   InActiveEffect := ReadInActiveEffect(F, 'FORMINFO', 'inactiveeffect');
  1484.   //
  1485.   if (RBPoint.X - LTPoint.X  <> 0) and
  1486.      (RBPoint.Y - LTPoint.Y <> 0)
  1487.   then
  1488.     begin
  1489.       if LTPoint.X < CLRect.Left then LTPoint.X := CLRect.Left;
  1490.       if LTPoint.Y < CLRect.Top then LTPoint.Y := CLRect.Top;
  1491.       if RTPoint.X > CLRect.Right then RTPoint.X := CLRect.Right;
  1492.       if RTPoint.Y < CLRect.Top then RTPoint.Y := CLRect.Top;
  1493.       if LBPoint.X < CLRect.Left then LBPoint.X := CLRect.Left;
  1494.       if LBPoint.Y > CLRect.Bottom then LBPoint.Y := CLRect.Bottom;
  1495.       if RBPoint.X > CLRect.Right then RBPoint.X := CLRect.Right;
  1496.       if RBPoint.Y > CLRect.Bottom then RBPoint.Y := CLRect.Bottom;
  1497.     end;
  1498. end;
  1499. const
  1500.   SkinDataFileFormat = 2;
  1501. procedure TspSkinData.SaveToFile;
  1502. var
  1503.   F: TIniFile;
  1504.   Version: Integer;
  1505. begin
  1506.   //
  1507.   F := TIniFile.Create(FileName);
  1508.   if BuildMode
  1509.   then
  1510.     begin
  1511.       EraseSections(F);
  1512.       LoadNames;
  1513.     end;  
  1514.   //
  1515.   F.EraseSection('VERSION');
  1516.   Version := SkinDataFileFormat;
  1517.   F.WriteInteger('VERSION', 'ver', Version);
  1518.   F.WriteString('VERSION', 'skinname', SkinName);
  1519.   F.WriteString('VERSION', 'skinauthor', SkinAuthor);
  1520.   F.WriteString('VERSION', 'authoremail', AuthorEmail);
  1521.   F.WriteString('VERSION', 'authorurl', AuthorURL);
  1522.   F.WriteString('VERSION', 'skincomments', SkinComments);
  1523.   //
  1524.   F.EraseSection('PICTURES');
  1525.   F.WriteString('PICTURES', 'picture', FPictureName);
  1526.   F.WriteString('PICTURES', 'mask', FMaskName);
  1527.   F.WriteString('PICTURES', 'rolluppicture', FRollUpPictureName);
  1528.   F.WriteString('PICTURES', 'rollupmask', FRollUpMaskName);
  1529.   WriteActivePictures(F);
  1530.   //
  1531.   F.EraseSection('CURSORS');
  1532.   WriteCursors(F);
  1533.   //
  1534.   F.EraseSection('FORMINFO');
  1535.   WriteFormInfo(F);
  1536.   //
  1537.   F.EraseSection('POPUPWINDOW');
  1538.   PopupWindow.SaveToFile(F);
  1539.   //
  1540.   F.EraseSection('HINTWINDOW');
  1541.   HintWindow.SaveToFile(F);
  1542.   //
  1543.   WriteAreas(F);
  1544.   //
  1545.   WriteObjects(F);
  1546.   //
  1547.   WriteCtrls(F);
  1548.   //
  1549.   F.Free;
  1550. end;
  1551. procedure TspSkinData.LoadFromFile;
  1552. var
  1553.   F: TIniFile;
  1554.   FilePath: String;
  1555. begin
  1556.   Empty := True;
  1557.   SendSkinDataMessage(WM_BEFORECHANGESKINDATA);
  1558.   ClearAll;
  1559.   F := TIniFile.Create(FileName);
  1560.   if not CheckSkinFile(F)
  1561.   then
  1562.     begin
  1563.       SendSkinDataMessage(WM_CHANGESKINDATA);
  1564.       SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1565.       F.Free;
  1566.       Exit;
  1567.     end;
  1568.   FilePath := ExtractFilePath(FileName);
  1569.   //
  1570.   SkinName := F.ReadString('VERSION', 'skinname', '');
  1571.   SkinAuthor := F.ReadString('VERSION', 'skinauthor', '');
  1572.   AuthorEmail := F.ReadString('VERSION', 'authoremail', '');
  1573.   AuthorURL := F.ReadString('VERSION', 'authorurl', '');
  1574.   SkinComments := F.ReadString('VERSION', 'skincomments', '');
  1575.   //
  1576.   FPictureName := F.ReadString('PICTURES', 'picture', '');
  1577.   FMaskName := F.ReadString('PICTURES', 'mask', '');
  1578.   FRollUpPictureName := F.ReadString('PICTURES', 'rolluppicture', '');
  1579.   FRollUpMaskName := F.ReadString('PICTURES', 'rollupmask', '');
  1580.   if FPictureName <> ''
  1581.   then
  1582.     begin
  1583.       if IsJpegFile(FPictureName)
  1584.       then
  1585.         LoadFromJPegFile(FPicture, FilePath + FPictureName)
  1586.       else
  1587.         FPicture.LoadFromFile(FilePath + FPictureName);
  1588.     end
  1589.   else
  1590.     FPicture.Assign(nil);
  1591.   if FMaskName <> ''
  1592.   then
  1593.     begin
  1594.       if IsJpegFile(FMaskName)
  1595.       then
  1596.         LoadFromJpegFile(FMask, FilePath + FMaskName)
  1597.       else
  1598.         FMask.LoadFromFile(FilePath + FMaskName);
  1599.     end
  1600.   else
  1601.     FMask.Assign(nil);
  1602.   if FRollUpPictureName <> ''
  1603.   then
  1604.     begin
  1605.       if IsJpegFile(FRollUpPictureName)
  1606.       then
  1607.         LoadFromJPegFile(FRollUpPicture, FilePath + FRollUpPictureName)
  1608.       else
  1609.         FRollUpPicture.LoadFromFile(FilePath + FRollUpPictureName);
  1610.     end
  1611.   else
  1612.     FRollUpPicture.Assign(nil);
  1613.   if FRollUpMaskName <> ''
  1614.   then
  1615.     begin
  1616.       if IsJpegFile(FRollUpMaskName)
  1617.       then
  1618.         LoadFromJPegFile(FRollUpMask, FilePath + FRollUpMaskName)
  1619.       else
  1620.         FRollUpMask.LoadFromFile(FilePath + FRollUpMaskName);
  1621.     end
  1622.   else
  1623.     FRollUpMask.Assign(nil);
  1624.   ReadActivePictures(F, FilePath);
  1625.   ReadCursors(F, FilePath);
  1626.   //
  1627.   ReadFormInfo(F);
  1628.   //
  1629.   PopupWindow.LoadFromFile(F);
  1630.   //
  1631.   HintWindow.LoadFromFile(F);
  1632.   //
  1633.   ReadAreas(F);
  1634.   //
  1635.   ReadObjects(F);
  1636.   //
  1637.   ReadCtrls(F);
  1638.   //
  1639.   if BuildMode then LoadNames;
  1640.   F.UpdateFile;
  1641.   F.Free;
  1642.   Empty := False;
  1643.   SendSkinDataMessage(WM_CHANGESKINDATA);
  1644.   SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1645. end;
  1646. procedure TspSkinData.LoadCompressedStoredSkin(AStoredSkin: TspCompressedStoredSkin);
  1647. var
  1648.   TmpStream: TMemoryStream;
  1649.   CV: Integer;
  1650.   FIniStrings: TStrings;
  1651.   F: TMemIniFile;
  1652.   IsEmpty: Boolean;
  1653.   i, Count: Integer;
  1654. begin
  1655.   if AStoredSkin.Empty then Exit;
  1656.   Empty := True;
  1657.   SendSkinDataMessage(WM_BEFORECHANGESKINDATA);
  1658.   ClearAll;
  1659.   TmpStream := TMemoryStream.Create;
  1660.   AStoredSkin.DeCompressToStream(TmpStream);
  1661.   TmpStream.Seek(0, 0);
  1662.   TmpStream.Read(CV, SizeOf(CV));
  1663.   if CV <> 1
  1664.   then
  1665.     begin
  1666.       TmpStream.Free;
  1667.       Exit;
  1668.     end;
  1669.   //
  1670.   TmpStream.Read(IsEmpty, SizeOf(IsEmpty));
  1671.   if IsEmpty
  1672.   then FPicture.Assign(nil)
  1673.   else FPicture.LoadFromStream(TmpStream);
  1674.   TmpStream.Read(IsEmpty, SizeOf(IsEmpty));
  1675.   if IsEmpty
  1676.   then FMask.Assign(nil)
  1677.   else FMask.LoadFromStream(TmpStream);
  1678.   TmpStream.Read(IsEmpty, SizeOf(IsEmpty));
  1679.   if IsEmpty
  1680.   then FRollUpPicture.Assign(nil)
  1681.   else FRollUpPicture.LoadFromStream(TmpStream);
  1682.   TmpStream.Read(IsEmpty, SizeOf(IsEmpty));
  1683.   if IsEmpty
  1684.   then FRollUpMask.Assign(nil)
  1685.   else FRollUpMask.LoadFromStream(TmpStream);
  1686.   TmpStream.Read(Count, SizeOf(Count));
  1687.   if Count > 0
  1688.   then
  1689.     for i := 0 to Count - 1 do
  1690.     begin
  1691.       FActivePictures.Add(TBitMap.Create);
  1692.       TBitMap(FActivePictures.Items[i]).LoadFromStream(TmpStream);
  1693.     end;
  1694.   //
  1695.   FIniStrings := TStringList.Create;
  1696.   FIniStrings.LoadFromStream(TmpStream);
  1697.   F := TMemIniFile.Create('');
  1698.   F.SetStrings(FIniStrings);
  1699.   //
  1700.   SkinName := F.ReadString('VERSION', 'skinname', '');
  1701.   SkinAuthor := F.ReadString('VERSION', 'skinauthor', '');
  1702.   AuthorEmail := F.ReadString('VERSION', 'authoremail', '');
  1703.   AuthorURL := F.ReadString('VERSION', 'authorurl', '');
  1704.   SkinComments := F.ReadString('VERSION', 'skincomments', '');
  1705.   ReadFormInfo(F);
  1706.   PopupWindow.LoadFromFile(F);
  1707.   HintWindow.LoadFromFile(F);
  1708.   ReadObjects(F);
  1709.   ReadCtrls(F);
  1710.   //
  1711.   FIniStrings.Free;
  1712.   F.Free;
  1713.   TmpStream.Free;
  1714.   //
  1715.   Empty := False;
  1716.   SendSkinDataMessage(WM_CHANGESKINDATA);
  1717.   SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1718. end;
  1719. procedure TspSkinData.LoadStoredSkin;
  1720. var
  1721.   F: TMemIniFile;
  1722.   i: Integer;
  1723. begin
  1724.   Empty := True;
  1725.   SendSkinDataMessage(WM_BEFORECHANGESKINDATA);
  1726.   ClearAll;
  1727.   F := TMemIniFile.Create('');
  1728.   //
  1729.   F.SetStrings(AStoredSkin.FIniStrings);
  1730.   if not CheckSkinFile(F)
  1731.   then
  1732.     begin
  1733.       SendSkinDataMessage(WM_CHANGESKINDATA);
  1734.       SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1735.       F.Free;
  1736.       Exit;
  1737.     end;
  1738.   //
  1739.   SkinName := F.ReadString('VERSION', 'skinname', '');
  1740.   // load base pictures
  1741.   FPicture.Assign(AStoredSkin.FPicture);
  1742.   FMask.Assign(AStoredSkin.FMask);
  1743.   FRollUpPicture.Assign(AStoredSkin.FRollUpPicture);
  1744.   FRollUpMask.Assign(AStoredSkin.FRollUpMask);
  1745.   // load activepictures
  1746.   if AStoredSkin.FActivePictures.Count > 0
  1747.   then
  1748.     for i := 0 to AStoredSkin.FActivePictures.Count - 1 do
  1749.     begin
  1750.       FActivePictures.Add(TBitMap.Create);
  1751.       TBitMap(FActivePictures.Items[i]).Assign(TBitMap(AStoredSkin.FActivePictures.Items[i]));
  1752.     end;
  1753.   // load cursors
  1754.   StartCursorIndex := F.ReadInteger('CURSORS', 'startcursorindex', 1);
  1755.   if StartCursorIndex < 1 then StartCursorIndex := 1;
  1756.   //
  1757.   ReadFormInfo(F);
  1758.   //
  1759.   PopupWindow.LoadFromFile(F);
  1760.   //
  1761.   HintWindow.LoadFromFile(F);
  1762.   //
  1763.   ReadAreas(F);
  1764.   //
  1765.   ReadObjects(F);
  1766.   //
  1767.   ReadCtrls(F);
  1768.   //
  1769.   F.Free;
  1770.   Empty := False;
  1771.   SendSkinDataMessage(WM_CHANGESKINDATA);
  1772.   SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1773. end;
  1774. procedure TspSkinData.ClearSkin;
  1775. begin
  1776.   ClearAll;
  1777.   SendSkinDataMessage(WM_BEFORECHANGESKINDATA);
  1778.   SendSkinDataMessage(WM_CHANGESKINDATA);
  1779.   SendSkinDataMessage(WM_AFTERCHANGESKINDATA);
  1780. end;
  1781. constructor TspCompressedStoredSkin.Create(AOwner: TComponent);
  1782. begin
  1783.   inherited;
  1784.   FCompressedStream := TMemoryStream.Create;
  1785. end;
  1786. destructor TspCompressedStoredSkin.Destroy;
  1787. begin
  1788.   FCompressedStream.Free;
  1789.   inherited;
  1790. end;
  1791. function TspCompressedStoredSkin.GetEmpty: Boolean;
  1792. begin
  1793.   Result := FCompressedStream.Size = 0;
  1794. end;
  1795. procedure TspCompressedStoredSkin.SetFileName;
  1796. begin
  1797.   if (csDesigning in ComponentState) and not
  1798.      (csLoading in ComponentState)
  1799.   then
  1800.     begin
  1801.       FFileName := ExtractFileName(Value);
  1802.       LoadFromIniFile(Value);
  1803.     end
  1804.   else
  1805.     FFileName := Value;
  1806. end;
  1807. procedure TspCompressedStoredSkin.DefineProperties(Filer: TFiler);
  1808. begin
  1809.   inherited;
  1810.   Filer.DefineBinaryProperty('CompressedData', ReadData, WriteData, True);
  1811. end;
  1812. const
  1813.   CompressVersion = 1;
  1814. procedure TspCompressedStoredSkin.ReadData;
  1815. begin
  1816.   FCompressedStream.LoadFromStream(Reader);
  1817. end;
  1818. procedure TspCompressedStoredSkin.WriteData;
  1819. begin
  1820.   FCompressedStream.SaveToStream(Writer);
  1821. end;
  1822. procedure TspCompressedStoredSkin.DeCompressToStream;
  1823. begin
  1824.   DecompressStream(S, FCompressedStream);
  1825. end;
  1826. procedure TspCompressedStoredSkin.LoadFromIniFile(AFileName: String);
  1827. var
  1828.   TmpStream: TMemoryStream;
  1829.   F: TMemIniFile;
  1830.   Path: String;
  1831.   FIniStrings: TStrings;
  1832.   BitMapName: String;
  1833.   BitMap: TBitMap;
  1834.   IsEmpty: Boolean;
  1835.   i, Count, CV: Integer;
  1836.   PNames: TStrings;
  1837. begin
  1838.   FIniStrings := TStringList.Create;
  1839.   FIniStrings.LoadFromFile(AFileName);
  1840.   F := TMemIniFile.Create(AFileName);
  1841.   if not CheckSkinFile(F)
  1842.   then
  1843.     begin
  1844.       F.Free;
  1845.       FIniStrings.Free;
  1846.       Exit;
  1847.     end;
  1848.   Path := ExtractFilePath(AFileName);
  1849.   FCompressedStream.Clear;
  1850.   TmpStream := TMemoryStream.Create;
  1851.   //
  1852.   CV := CompressVersion;
  1853.   TmpStream.Write(CV, SizeOf(CV));
  1854.   // load bitmaps to stream
  1855.   BitMap := TBitMap.Create;
  1856.   //
  1857.   BitMapName := F.ReadString('PICTURES', 'picture', '');
  1858.   if BitMapName <> ''
  1859.   then BitMap.LoadFromFile(Path + BitMapName)
  1860.   else BitMap.Assign(nil);
  1861.   IsEmpty := BitMap.Empty;
  1862.   TmpStream.Write(IsEmpty, SizeOf(IsEmpty));
  1863.   if not IsEmpty
  1864.   then BitMap.SaveToStream(TmpStream);
  1865.   //
  1866.   BitMapName := F.ReadString('PICTURES', 'mask', '');
  1867.   if BitMapName <> ''
  1868.   then BitMap.LoadFromFile(Path + BitMapName)
  1869.   else BitMap.Assign(nil);
  1870.   IsEmpty := BitMap.Empty;
  1871.   TmpStream.Write(IsEmpty, SizeOf(IsEmpty));
  1872.   if not IsEmpty then BitMap.SaveToStream(TmpStream);
  1873.   //
  1874.   BitMapName := F.ReadString('PICTURES', 'rolluppicture', '');
  1875.   if BitMapName <> ''
  1876.   then BitMap.LoadFromFile(Path + BitMapName)
  1877.   else BitMap.Assign(nil);
  1878.   IsEmpty := BitMap.Empty;
  1879.   TmpStream.Write(IsEmpty, SizeOf(IsEmpty));
  1880.   if not IsEmpty
  1881.   then BitMap.SaveToStream(TmpStream);
  1882.   //
  1883.   BitMapName := F.ReadString('PICTURES', 'rollupmask', '');
  1884.   if BitMapName <> ''
  1885.   then BitMap.LoadFromFile(Path + BitMapName)
  1886.   else BitMap.Assign(nil);
  1887.   IsEmpty := BitMap.Empty;
  1888.   TmpStream.Write(IsEmpty, SizeOf(IsEmpty));
  1889.   if not IsEmpty
  1890.   then BitMap.SaveToStream(TmpStream);
  1891.   //
  1892.   PNames := TStringList.Create;
  1893.   ReadStrings1(F, 'PICTURES', 'activepictures', PNames);
  1894.   Count := PNames.Count;
  1895.   TmpStream.Write(Count, SizeOf(Count));
  1896.   if Count > 0
  1897.   then
  1898.     for i := 0 to Count - 1 do
  1899.     begin
  1900.       BitMapName := Path + PNames[i];
  1901.       BitMap.LoadFromFile(BitMapName);
  1902.       BitMap.SaveToStream(TmpStream);
  1903.     end;
  1904.   PNames.Free;
  1905.   //
  1906.   FIniStrings.SaveToStream(TmpStream);
  1907.   //
  1908.   CompressStream(TmpStream, FCompressedStream);
  1909.   BitMap.Free;
  1910.   FIniStrings.Free;
  1911.   TmpStream.Free;
  1912.   F.Free;
  1913. end;
  1914. procedure TspCompressedStoredSkin.LoadFromCompressFile(AFileName: String);
  1915. var
  1916.   F: TFileStream;
  1917.   CV, Size: LongInt;
  1918. begin
  1919.   FCompressedStream.Clear;
  1920.   F := TFileStream.Create(AFileName, fmOpenRead);
  1921.   F.Read(CV, SizeOf(CV));
  1922.   if CV = 1
  1923.   then
  1924.     begin
  1925.       F.Read(Size, SizeOf(Size));
  1926.       FCompressedStream.CopyFrom(F, Size);
  1927.     end;
  1928.   F.Free;
  1929. end;
  1930. procedure TspCompressedStoredSkin.SaveToCompressFile(AFileName: String);
  1931. var
  1932.   F: TFileStream;
  1933.   CV, Size: LongInt;
  1934. begin
  1935.   if Empty then Exit;
  1936.   F := TFileStream.Create(AFileName, fmCreate);
  1937.   CV := CompressVersion;
  1938.   F.Write(CV, SizeOf(CV));
  1939.   Size := FCompressedStream.Size;
  1940.   F.Write(Size, SizeOf(Size));
  1941.   FCompressedStream.SaveToStream(F);
  1942.   F.Free;
  1943. end;
  1944. end.