Subversion Repositories spacemission

Rev

Rev 16 | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. unit DXReg;
  2.  
  3. interface
  4.  
  5. {$I DelphiXcfg.inc}
  6. {$WARNINGS OFF}
  7. uses
  8.   Windows, SysUtils, Classes, Forms, Dialogs, Graphics, TypInfo,
  9.   Controls, StdCtrls, ExtCtrls, Buttons,
  10. {$IFDEF D3DRM}Colli3DX, {$ENDIF}
  11. {$IFNDEF VER6UP}DsgnIntf,
  12. {$ELSE}Designintf, DesignEditors, VCLEditors, PropertyCategories,
  13. {$ENDIF}
  14.   DXDraws, DXSounds, DIB, DXWave, DXInput, DXPlay, DXSprite, DXClass;
  15.  
  16. type
  17.  
  18.   {  TDXDrawDisplayProperty  }
  19.  
  20.   TDXDrawDisplayProperty = class(TClassProperty)
  21.   public
  22.     function GetAttributes: TPropertyAttributes; override;
  23.     function GetValue: string; override;
  24.     procedure GetValues(Proc: TGetStrProc); override;
  25.     procedure SetValue(const Value: string); override;
  26.   end;
  27.  
  28.   {  TDIBProperty  }
  29.  
  30.   TDIBProperty = class(TPropertyEditor)
  31.   public
  32.     procedure Edit; override;
  33.     function GetValue: string; override;
  34.     function GetAttributes: TPropertyAttributes; override;
  35.   end;
  36.  
  37.   {  TDXDIBEditor  }
  38.  
  39.   TDXDIBEditor = class(TComponentEditor)
  40.   public
  41.     procedure Edit; override;
  42.     procedure ExecuteVerb(Index: Integer); override;
  43.     function GetVerb(Index: Integer): string; override;
  44.     function GetVerbCount: Integer; override;
  45.   end;
  46.  
  47.   {  TPictureCollectionItem_PictureProperty  }
  48.  
  49.   TPictureCollectionItem_PictureProperty = class(TPropertyEditor)
  50.   public
  51.     procedure Edit; override;
  52.     function GetValue: string; override;
  53.     function GetAttributes: TPropertyAttributes; override;
  54.   end;
  55.  
  56.   {  TDXImageListEditor  }
  57.  
  58.   TDXImageListEditor = class(TComponentEditor)
  59.   private
  60.     procedure ListBox1DblClick(Sender: TObject);
  61.   public
  62.     procedure ExecuteVerb(Index: Integer); override;
  63.     function GetVerb(Index: Integer): string; override;
  64.     function GetVerbCount: Integer; override;
  65.   end;
  66.  
  67.   { TDXSpriteEngineEditor}
  68.  
  69.   TDXSpriteEngineEditor = class(TComponentEditor)
  70.   private
  71.     procedure ListBox1DblClick(Sender: TObject);
  72.   public
  73.     procedure ExecuteVerb(Index: Integer); override;
  74.     function GetVerb(Index: Integer): string; override;
  75.     function GetVerbCount: Integer; override;
  76.   end;
  77.  
  78.   {  TWaveProperty  }
  79.  
  80.   TWaveProperty = class(TPropertyEditor)
  81.   public
  82.     procedure Edit; override;
  83.     function GetValue: string; override;
  84.     function GetAttributes: TPropertyAttributes; override;
  85.   end;
  86.  
  87.   {  TDXWaveEditor  }
  88.  
  89.   TDXWaveEditor = class(TComponentEditor)
  90.   public
  91.     procedure Edit; override;
  92.     procedure ExecuteVerb(Index: Integer); override;
  93.     function GetVerb(Index: Integer): string; override;
  94.     function GetVerbCount: Integer; override;
  95.   end;
  96.  
  97.   {  TDXWaveListEditor  }
  98.  
  99.   TDXWaveListEditor = class(TComponentEditor)
  100.   public
  101.     procedure ExecuteVerb(Index: Integer); override;
  102.     function GetVerb(Index: Integer): string; override;
  103.     function GetVerbCount: Integer; override;
  104.   end;
  105.  
  106.   {  TForceFeedbackEffectsProperty  }
  107.  
  108.   TForceFeedbackEffectsProperty = class(TClassProperty)
  109.   public
  110.     procedure Edit; override;
  111.     function GetValue: string; override;
  112.     function GetAttributes: TPropertyAttributes; override;
  113.   end;
  114.  
  115.   {  TDXInputEditor  }
  116.  
  117.   TDXInputEditor = class(TComponentEditor)
  118.   public
  119.     procedure Edit; override;
  120.     procedure ExecuteVerb(Index: Integer); override;
  121.     function GetVerb(Index: Integer): string; override;
  122.     function GetVerbCount: Integer; override;
  123.   end;
  124.  
  125.   {  TGUIDProperty  }
  126.  
  127.   TGUIDProperty = class(TStringProperty)
  128.   public
  129.     procedure Edit; override;
  130.     function GetAttributes: TPropertyAttributes; override;
  131.   end;
  132.  
  133.   {  TSpriteProperty  }
  134.  
  135.   TSpriteProperty = class(TClassProperty)
  136.   public
  137.     procedure Edit; override;
  138.     function GetValue: string; override;
  139.     function GetAttributes: TPropertyAttributes; override;
  140.   end;
  141.  
  142.   {  TMidiProperty  }
  143.  
  144.   TMidiProperty = class(TClassProperty)
  145.   public
  146.     procedure Edit; override;
  147.     function GetValue: string; override;
  148.     function GetAttributes: TPropertyAttributes; override;
  149.   end;
  150.  
  151.   TMidiEditor = class(TDefaultEditor)
  152.   public
  153. {$IFDEF VER6UP}
  154.     procedure EditProperty(const Prop: IProperty; var Continue: Boolean); override;
  155. {$ELSE}
  156.     procedure EditProperty(PropertyEditor: TPropertyEditor;
  157.       var continue, FreeEditor: Boolean); override;
  158. {$ENDIF}
  159.   end;
  160.  
  161.   {  TDXMidiListEditor  }
  162.  
  163.   TDXMidiListEditor = class(TComponentEditor)
  164.   public
  165.     procedure ExecuteVerb(Index: Integer); override;
  166.     function GetVerb(Index: Integer): string; override;
  167.     function GetVerbCount: Integer; override;
  168.   end;
  169.  
  170.   {  Trace editor}
  171.  
  172.   TDXDrawEditor = class(TComponentEditor)
  173.   public
  174.     procedure ExecuteVerb(Index: Integer); override;
  175.     function GetVerb(Index: Integer): string; override;
  176.     function GetVerbCount: Integer; override;
  177.   end;
  178.  
  179. procedure Register;
  180.  
  181. implementation
  182.  
  183. uses DXPictEdit, DXWaveEdit, DXFFBEdit, DXInptEdit, DXGUIDEdit, DXSpriteEdit,
  184.   DXMidiEdit, DXDIBEffectEdit, {$IFDEF VER4UP}DXGlueItEdit,{$ENDIF} DXPathEdit;
  185.  
  186. const
  187.   SNone = '(None)';
  188.  
  189.   SSettingImage = '&Image...';
  190.   SSettingWave = '&Wave...';
  191.   SDXGFileFilter = 'DXG file(*.dxg)|*.dxg|All files(*.*)|*.*';
  192.   SDXGOpenFileFilter = 'DXG file(*.dxg)|*.dxg|Bitmap file(*.bmp)|*.bmp|All files(*.*)|*.*';
  193.   SDXWFileFilter = 'DXW file(*.dxw)|*.dxg|All files(*.*)|*.*';
  194.   SDXWOpenFileFilter = 'DXW file(*.dxw)|*.dxw|Wave file(*.wav)|*.wav|All files(*.*)|*.*';
  195.   SDXMFileFilter = 'DXM file(*.dxm)|*.dxm|All files(*.*)|*.*';
  196.   SDXMOpenFileFilter = 'DXM file(*.dxm)|*.dxm|Midi file(*.mid)|*.mid|All files(*.*)|*.*';
  197.  
  198.   SSinglePlayer = '&Single player';
  199.   SMultiPlayer1 = 'Multi player &1';
  200.   SMultiPlayer2 = 'Multi player &2';
  201.  
  202.   SOpen = '&Open...';
  203.   SSave = '&Save...';
  204.  
  205. procedure Register;
  206. begin
  207.   RegisterPropertyEditor(TypeInfo(TDXDrawDisplay), nil, '',
  208.     TDXDrawDisplayProperty);
  209.  
  210.   RegisterPropertyEditor(TypeInfo(TDIB), nil, '', TDIBProperty);
  211.   RegisterComponentEditor(TCustomDXDIB, TDXDIBEditor);
  212.  
  213.   RegisterPropertyEditor(TypeInfo(TPicture), TPictureCollectionItem, 'Picture', TPictureCollectionItem_PictureProperty);
  214.   RegisterComponentEditor(TCustomDXImageList, TDXImageListEditor);
  215.  
  216.   RegisterPropertyEditor(TypeInfo(TWave), nil, '', TWaveProperty);
  217.   RegisterComponentEditor(TCustomDXWave, TDXWaveEditor);
  218.  
  219.   RegisterComponentEditor(TCustomDXWaveList, TDXWaveListEditor);
  220.  
  221.   RegisterPropertyEditor(TypeInfo(TForceFeedbackEffects), nil, '', TForceFeedbackEffectsProperty);
  222.  
  223.   RegisterComponentEditor(TCustomDXInput, TDXInputEditor);
  224.  
  225.   {$IFDEF UseDirectPlay}
  226.   RegisterPropertyEditor(TypeInfo(string), TCustomDXPlay, 'GUID', TGUIDProperty);
  227.   {$ENDIF} // UseDirectPlay
  228.  
  229.   RegisterPropertyEditor(TypeInfo(TImageSprite), NIL, '', TSpriteProperty);
  230.   RegisterPropertyEditor(TypeInfo(TImageSpriteEx), NIL, '', TSpriteProperty);
  231.   RegisterPropertyEditor(TypeInfo(TSprite), NIL, '', TSpriteProperty);
  232.   RegisterPropertyEditor(TypeInfo(TBackgroundSprite), NIL, '', TSpriteProperty);
  233.  
  234.   RegisterPropertyEditor(TypeInfo(TMusicDataProp), nil, 'MIDI', TMidiProperty);
  235.   RegisterComponentEditor(TDXMusic, TDXMidiListEditor);
  236.   RegisterComponentEditor(TDXSpriteEngine, TDXSpriteEngineEditor);
  237.  
  238.   RegisterComponents('DelphiX',
  239.     [TDXDraw,
  240.      TDXDIB,
  241.      TDXImageList,
  242. {$IFDEF DX3D_deprecated}
  243.      TDX3D,
  244. {$ENDIF}
  245.      TDXSound,
  246.      TDXWave,
  247.      TDXWaveList,
  248.      TDXInput,
  249.      {$IFDEF UseDirectPlay}
  250.      TDXPlay,
  251.      {$ENDIF} // UseDirectPlay
  252.      TDXSpriteEngine,
  253.      TDXTimer,
  254.      TDXPaintBox,
  255.      TDXFont,
  256.      TDXPowerFont,
  257.      TDXMusic
  258.     ]);
  259.   RegisterComponentEditor(TCustomDXDraw, TDXDrawEditor);
  260. end;
  261.  
  262. { TDXDrawDisplayProperty }
  263.  
  264. function TDXDrawDisplayProperty.GetAttributes: TPropertyAttributes;
  265. begin
  266.   Result := inherited GetAttributes + [paValueList] - [paReadOnly];
  267. end;
  268.  
  269. const
  270.   SDisplayMode = '%dx%dx%d';
  271.  
  272. function TDXDrawDisplayProperty.GetValue: string;
  273. begin
  274.   with TDXDrawDisplay(GetOrdValue) do
  275.     Result := Format(SDisplayMode, [Width, Height, BitCount]);
  276. end;
  277.  
  278. procedure TDXDrawDisplayProperty.GetValues(Proc: TGetStrProc);
  279. const
  280.   List: array[0..2] of TPoint = (
  281.     (X: 640; Y: 480),
  282.     (X: 800; Y: 600),
  283.     (X: 1024; Y: 768));
  284. var
  285.   BitCount, i: Integer;
  286. begin
  287.   for i := Low(List) to High(List) do
  288.     for BitCount := 1 to 3 do
  289.       Proc(Format(SDisplayMode, [List[i].x, List[i].y, BitCount * 8]));
  290. end;
  291.  
  292. procedure TDXDrawDisplayProperty.SetValue(const Value: string);
  293. var
  294.   s: string;
  295.   i, AWidth, AHeight, ABitCount: Integer;
  296. begin
  297.   s := Value;
  298.  
  299.   i := Pos('x', s);
  300.   AWidth := StrToInt(Copy(s, 1, i - 1));
  301.   s := Copy(s, i + 1, Length(s));
  302.  
  303.   i := Pos('x', s);
  304.   AHeight := StrToInt(Copy(s, 1, i - 1));
  305.   s := Copy(s, i + 1, Length(s));
  306.  
  307.   ABitCount := StrToInt(s);
  308.  
  309.   with TDXDrawDisplay(GetOrdValue) do
  310.   begin
  311.     Width := AWidth;
  312.     Height := AHeight;
  313.     BitCount := ABitCount;
  314.   end;
  315.  
  316.   SetOrdValue(GetOrdValue);
  317. end;
  318.  
  319. {  TDIBProperty  }
  320.  
  321. procedure TDIBProperty.Edit;
  322. var
  323.   Form: TDelphiXPictureEditForm;
  324. begin
  325.   Form := TDelphiXPictureEditForm.Create(nil);
  326.   try
  327.     Form.ViewBox.Picture.Assign(TDIB(GetOrdValue));
  328.     Form.DIBClassOnly := True;
  329.     Form.ShowModal;
  330.     if Form.Tag <> 0 then
  331.     begin
  332.       SetOrdValue(Integer(Form.ViewBox.Picture.Graphic));
  333.       Designer.Modified;
  334.     end;
  335.   finally
  336.     Form.Free;
  337.   end;
  338. end;
  339.  
  340. function TDIBProperty.GetAttributes: TPropertyAttributes;
  341. begin
  342.   Result := [paDialog, paReadOnly];
  343. end;
  344.  
  345. function TDIBProperty.GetValue: string;
  346. begin
  347.   if TDIB(GetOrdValue).Size = 0 then
  348.     Result := SNone
  349.   else
  350.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  351. end;
  352.  
  353. {  TDXDIBEditor  }
  354.  
  355. procedure TDXDIBEditor.Edit;
  356. var
  357.   Form: TDelphiXPictureEditForm;
  358. begin
  359.   Form := TDelphiXPictureEditForm.Create(nil);
  360.   try
  361.     Form.ViewBox.Picture.Assign(TCustomDXDIB(Component).DIB);
  362.     Form.DIBClassOnly := True;
  363.     Form.ShowModal;
  364.     if Form.Tag <> 0 then
  365.     begin
  366.       TCustomDXDIB(Component).DIB.Assign(TGraphic(Form.ViewBox.Picture.Graphic));
  367.       Designer.Modified;
  368.     end;
  369.   finally
  370.     Form.Free;
  371.   end;
  372. end;
  373.  
  374. procedure TDXDIBEditor.ExecuteVerb(Index: Integer);
  375. begin
  376.   case Index of
  377.     0: Edit;
  378.   end;
  379. end;
  380.  
  381. function TDXDIBEditor.GetVerb(Index: Integer): string;
  382. begin
  383.   case Index of
  384.     0: Result := SSettingImage;
  385.   end;
  386. end;
  387.  
  388. function TDXDIBEditor.GetVerbCount: Integer;
  389. begin
  390.   Result := 1;
  391. end;
  392.  
  393. {  TPictureCollectionItem_PictureProperty  }
  394.  
  395. procedure TPictureCollectionItem_PictureProperty.Edit;
  396. var
  397.   Form: TDelphiXPictureEditForm;
  398.   Item: TPictureCollectionItem;
  399.   TempDIB: TDIB;
  400. begin
  401.   Form := TDelphiXPictureEditForm.Create(nil);
  402.   try
  403.     Form.ViewBox.Picture := TPicture(GetOrdValue);
  404.     Form.ShowModal;
  405.     if Form.Tag <> 0 then
  406.     begin
  407.       SetOrdValue(Integer(Form.ViewBox.Picture));
  408.  
  409.       Item := GetComponent(0) as TPictureCollectionItem;
  410.       if Item.Picture.Graphic <> nil then
  411.       begin
  412.         TempDIB := TDIB.Create;
  413.         try
  414.           TempDIB.SetSize(1, 1, 24);
  415.           TempDIB.Canvas.Draw(0, 0, Item.Picture.Graphic);
  416.           Item.TransparentColor := TempDIB.Pixels[0, 0];
  417.         finally
  418.           TempDIB.Free;
  419.         end;
  420.       end;
  421.       Designer.Modified;
  422.     end;
  423.   finally
  424.     Form.Free;
  425.   end;
  426. end;
  427.  
  428. function TPictureCollectionItem_PictureProperty.GetAttributes: TPropertyAttributes;
  429. begin
  430.   Result := [paDialog, paReadOnly];
  431. end;
  432.  
  433. function TPictureCollectionItem_PictureProperty.GetValue: string;
  434. begin
  435.   if (TPicture(GetOrdValue).Graphic = nil) or (TPicture(GetOrdValue).Graphic.Empty) then
  436.     Result := SNone
  437.   else
  438.     Result := Format('(%s)', [TPicture(GetOrdValue).Graphic.ClassName]);
  439. end;
  440.  
  441. {  dialog  }
  442. function CreateListBox(DblClck: TNotifyEvent; out lstbx: TListBox): TForm;
  443. var
  444.   Panel1: TPanel;
  445.   Panel2: TPanel;
  446.   BitBtn1: TBitBtn;
  447.   BitBtn2: TBitBtn;
  448. begin
  449.   Result := TForm.Create(nil);
  450.   Panel1 := TPanel.Create(Result);
  451.   lstbx := TListBox.Create(Result);
  452.   Panel2 := TPanel.Create(Result);
  453.   BitBtn1 := TBitBtn.Create(Result);
  454.   BitBtn2 := TBitBtn.Create(Result);
  455.   with Result do
  456.   begin
  457.     Name := 'Form12';
  458.     Left := 0;
  459.     Top := 0;
  460.     BorderStyle := bsDialog;
  461.     Caption := 'Select Item';
  462.     ClientHeight := 206;
  463.     ClientWidth := 228;
  464.     Color := clBtnFace;
  465.     Font.Charset := DEFAULT_CHARSET;
  466.     Font.Color := clWindowText;
  467.     Font.Height := -11;
  468.     Font.Name := 'Tahoma';
  469.     Font.Style := [];
  470.     Position := poScreenCenter;
  471.     PixelsPerInch := 96;
  472.   end;
  473.   with Panel1 do
  474.   begin
  475.     Name := 'Panel1';
  476.     Parent := Result;
  477.     Left := 0;
  478.     Top := 0;
  479.     Width := 228;
  480.     Height := 165;
  481.     Align := alClient;
  482.     BevelOuter := bvNone;
  483.     BorderWidth := 4;
  484.     Caption := '';
  485.     TabOrder := 0;
  486.   end;
  487.   with lstbx do
  488.   begin
  489.     Name := 'ListBox1';
  490.     Parent := Panel1;
  491.     Left := 4;
  492.     Top := 4;
  493.     Width := 220;
  494.     Height := 157;
  495.     Align := alClient;
  496.     ItemHeight := 13;
  497.     TabOrder := 0;
  498.     OnDblClick := DblClck;
  499.   end;
  500.   with Panel2 do
  501.   begin
  502.     Name := 'Panel2';
  503.     Parent := Result;
  504.     Left := 0;
  505.     Top := 165;
  506.     Width := 228;
  507.     Height := 41;
  508.     Align := alBottom;
  509.     BevelOuter := bvNone;
  510.     Caption := '';
  511.     TabOrder := 1;
  512.   end;
  513.   with BitBtn1 do
  514.   begin
  515.     Name := 'BitBtn1';
  516.     Parent := Panel2;
  517.     Left := 24;
  518.     Top := 8;
  519.     Width := 75;
  520.     Height := 25;
  521.     TabOrder := 0;
  522.     Kind := bkOK;
  523.   end;
  524.   with BitBtn2 do
  525.   begin
  526.     Name := 'BitBtn2';
  527.     Parent := Panel2;
  528.     Left := 128;
  529.     Top := 8;
  530.     Width := 75;
  531.     Height := 25;
  532.     TabOrder := 1;
  533.     Kind := bkCancel;
  534.   end;
  535. end;
  536. function Alter(const str, altstr: string): string;
  537. begin
  538.   if str = '' then Result := altstr
  539.   else Result := str;
  540. end;
  541.  
  542. {  TDXImageListEditor  }
  543.  
  544. procedure TDXImageListEditor.ExecuteVerb(Index: Integer);
  545. var
  546.   OpenDialog: TOpenDialog;
  547.   SaveDialog: TSaveDialog;
  548.   DelphiXDIBEffectEditForm: TTDelphiXDIBEffectEditForm;
  549.   {$IFDEF VER4UP}
  550.   DXGlueItEditForm: TDXGlueItEditor;
  551.   {$ENDIF}
  552.   Q: TPictureCollectionItem;
  553.   I, N: Integer;
  554.   S, Z: string;
  555.   {$IFDEF VER4UP}
  556.   QQ: TCustomDXImageList;
  557.   FrmListBox: TForm;
  558.   ListBox1: TListBox;
  559.   {$ENDIF}
  560. begin
  561.   case Index of
  562.     0: begin
  563.         OpenDialog := TOpenDialog.Create(nil);
  564.         try
  565.           OpenDialog.DefaultExt := 'dxg';
  566.           OpenDialog.Filter := SDXGOpenFileFilter;
  567.           OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
  568.           if OpenDialog.Execute then
  569.           begin
  570.             if OpenDialog.FilterIndex = 2 then
  571.             begin
  572.               for i := 0 to OpenDialog.Files.Count - 1 do
  573.                 with TPictureCollectionItem.Create(TCustomDXImageList(Component).Items) do
  574.                 begin
  575.                   try
  576.                     Picture.LoadFromFile(OpenDialog.Files[i]);
  577.                     Name := ExtractFileName(OpenDialog.Files[i]);
  578.                   except
  579.                     Free;
  580.                     raise;
  581.                   end;
  582.                 end;
  583.             end else
  584.               TCustomDXImageList(Component).Items.LoadFromFile(OpenDialog.FileName);
  585.             Designer.Modified;
  586.           end;
  587.         finally
  588.           OpenDialog.Free;
  589.         end;
  590.       end;
  591.     1: begin
  592.         SaveDialog := TSaveDialog.Create(nil);
  593.         try
  594.           SaveDialog.DefaultExt := 'dxg';
  595.           SaveDialog.Filter := SDXGFileFilter;
  596.           SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
  597.           if SaveDialog.Execute then
  598.             TCustomDXImageList(Component).Items.SaveToFile(SaveDialog.FileName);
  599.         finally
  600.           SaveDialog.Free;
  601.         end;
  602.       end;
  603.     2:
  604.       begin {Create shine effect...}
  605.         {special effect}
  606.         DelphiXDIBEffectEditForm := TTDelphiXDIBEffectEditForm.Create(nil);
  607.         try
  608.           DelphiXDIBEffectEditForm.ShowModal;
  609.           if DelphiXDIBEffectEditForm.Tag = 1 then begin
  610.             {check all names in list of images}
  611.             N := 0;
  612.             Z := DelphiXDIBEffectEditForm.eName.Text; S := Z;
  613.             I := TCustomDXImageList(Component).Items.IndexOf(Z);
  614.             {hleda jmeno}
  615.             while I <> -1 do begin
  616.               S := Format('%s_%d', [Z, N]); {new name}
  617.               I := TCustomDXImageList(Component).Items.IndexOf(S);
  618.               Inc(N);
  619.             end;
  620.             {add item}
  621.             Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
  622.             Q.Picture.Assign(DelphiXDIBEffectEditForm.ResultDIB);
  623.             Q.Name := S; {it has to name!}
  624.             Q.Transparent := False; {transparend will be set in future}
  625.             Designer.Modified;
  626.           end;
  627.         finally
  628.           DelphiXDIBEffectEditForm.Free;
  629.         end;
  630.       end;
  631.     {$IFDEF VER4UP}
  632.     3:  {Glue-it editor}
  633.       begin
  634.         DXGlueItEditForm := TDXGlueItEditor.Create(nil);
  635.         try
  636.           QQ := TCustomDXImageList(Component); Q := nil;
  637.  
  638.           if QQ.Items.Count > 0 then begin
  639.             FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
  640.             try
  641.               for I := 0 to QQ.Items.Count - 1 do begin
  642.                 S := QQ.Items[I].Name;
  643.                 ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
  644.               end;
  645.  
  646.               case FrmListBox.ShowModal of
  647.               mrOk: //when select one
  648.                 begin
  649.                   //when image selected
  650.                   if ListBox1.ItemIndex <> -1 then begin
  651.                     Q := QQ.Items[ListBox1.ItemIndex];
  652.                     //load one image into editor
  653.                     DXGlueItEditForm.LoadImageFromList(Q.Name, Q.Picture, Q.Width,
  654.                       Q.Height, Q.Transparent, Q.TransparentColor);
  655.                     //image loadet, noe se up edit mode
  656.                     DXGlueItEditForm.Operation := ogiEdit;
  657.                   end;
  658.                 end;
  659.               mrCancel: DXGlueItEditForm.Operation := ogiNew;
  660.               else
  661.                 Exit
  662.               end {case};
  663.             finally
  664.               FrmListBox.Free;
  665.             end;
  666.           end
  667.           else
  668.             DXGlueItEditForm.Operation := ogiNew;
  669.           DXGlueItEditForm.ShowModal;
  670.           if DXGlueItEditForm.Tag = 1 then begin
  671.             //when image as new. it has to create new item
  672.             if DXGlueItEditForm.Operation = ogiNew then
  673.               Q := TPictureCollectionItem(TCustomDXImageList(Component).Items.Add);
  674.             //and store edited image into
  675.             if Assigned(Q) then
  676.               DXGlueItEditForm.SaveImageIntoList(Q);
  677.             //signal to designer that anything was changed;
  678.             Designer.Modified;
  679.           end;
  680.         finally
  681.           DXGlueItEditForm.Free;
  682.         end;
  683.       end;
  684.     {$ENDIF}  
  685.   end;
  686. end;
  687.  
  688. function TDXImageListEditor.GetVerb(Index: Integer): string;
  689. begin
  690.   case Index of
  691.     0: Result := SOpen;
  692.     1: Result := SSave;
  693.     2: Result := 'Shine effect...';
  694.     {$IFDEF VER4UP}
  695.     //fix bug by Pásztor Károly [fenistil@hu.hu]
  696.     3: Result := 'Glue it...';
  697.     {$ENDIF}
  698.   end;
  699. end;
  700.  
  701. function TDXImageListEditor.GetVerbCount: Integer;
  702. begin
  703.   Result := {$IFDEF VER4UP}4{$ELSE}3{$ENDIF};
  704. end;
  705.  
  706. procedure TDXImageListEditor.ListBox1DblClick(Sender: TObject);
  707. begin
  708.   if Sender is TListBox then with (Sender as TListBox) do
  709.     if ItemIndex <> -1 then
  710.       (Owner as TForm).ModalResult := mrOk;
  711. end;
  712.  
  713. {  TWaveProperty  }
  714.  
  715. procedure TWaveProperty.Edit;
  716. var
  717.   Form: TDelphiXWaveEditForm;
  718. begin
  719.   Form := TDelphiXWaveEditForm.Create(nil);
  720.   try
  721.     Form.Wave := TWave(GetOrdValue);
  722.     Form.ShowModal;
  723.     if Form.Tag <> 0 then
  724.     begin
  725.       SetOrdValue(Integer(Form.Wave));
  726.       Designer.Modified;
  727.     end;
  728.   finally
  729.     Form.Free;
  730.   end;
  731. end;
  732.  
  733. function TWaveProperty.GetAttributes: TPropertyAttributes;
  734. begin
  735.   Result := [paDialog, paReadOnly];
  736. end;
  737.  
  738. function TWaveProperty.GetValue: string;
  739. begin
  740.   if TWave(GetOrdValue).Size = 0 then
  741.     Result := SNone
  742.   else
  743.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  744. end;
  745.  
  746. {  TDXWaveEditor  }
  747.  
  748. procedure TDXWaveEditor.Edit;
  749. var
  750.   Form: TDelphiXWaveEditForm;
  751. begin
  752.   Form := TDelphiXWaveEditForm.Create(nil);
  753.   try
  754.     Form.Wave := TCustomDXWave(Component).Wave;
  755.     Form.ShowModal;
  756.     if Form.Tag <> 0 then
  757.     begin
  758.       TCustomDXWave(Component).Wave := Form.Wave;
  759.       Designer.Modified;
  760.     end;
  761.   finally
  762.     Form.Free;
  763.   end;
  764. end;
  765.  
  766. procedure TDXWaveEditor.ExecuteVerb(Index: Integer);
  767. begin
  768.   case Index of
  769.     0: Edit;
  770.   end;
  771. end;
  772.  
  773. function TDXWaveEditor.GetVerb(Index: Integer): string;
  774. begin
  775.   case Index of
  776.     0: Result := SSettingWave;
  777.   end;
  778. end;
  779.  
  780. function TDXWaveEditor.GetVerbCount: Integer;
  781. begin
  782.   Result := 1;
  783. end;
  784.  
  785. {  TDXWaveListEditor  }
  786.  
  787. procedure TDXWaveListEditor.ExecuteVerb(Index: Integer);
  788. var
  789.   OpenDialog: TOpenDialog;
  790.   SaveDialog: TSaveDialog;
  791.   i: Integer;
  792. begin
  793.   case Index of
  794.     0: begin
  795.         OpenDialog := TOpenDialog.Create(nil);
  796.         try
  797.           OpenDialog.DefaultExt := 'dxw';
  798.           OpenDialog.Filter := SDXWOpenFileFilter;
  799.           OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
  800.           if OpenDialog.Execute then
  801.           begin
  802.             if OpenDialog.FilterIndex = 2 then
  803.             begin
  804.               for i := 0 to OpenDialog.Files.Count - 1 do
  805.                 with TWaveCollectionItem.Create(TCustomDXWaveList(Component).Items) do
  806.                 begin
  807.                   try
  808.                     Wave.LoadFromFile(OpenDialog.Files[i]);
  809.                     Name := ExtractFileName(OpenDialog.Files[i]);
  810.                   except
  811.                     Free;
  812.                     raise;
  813.                   end;
  814.                 end;
  815.             end else
  816.               TCustomDXWaveList(Component).Items.LoadFromFile(OpenDialog.FileName);
  817.             Designer.Modified;
  818.           end;
  819.         finally
  820.           OpenDialog.Free;
  821.         end;
  822.       end;
  823.     1: begin
  824.         SaveDialog := TSaveDialog.Create(nil);
  825.         try
  826.           SaveDialog.DefaultExt := 'dxw';
  827.           SaveDialog.Filter := SDXWFileFilter;
  828.           SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
  829.           if SaveDialog.Execute then
  830.             TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
  831.         finally
  832.           SaveDialog.Free;
  833.         end;
  834.       end;
  835.   end;
  836. end;
  837.  
  838. function TDXWaveListEditor.GetVerb(Index: Integer): string;
  839. begin
  840.   case Index of
  841.     0: Result := SOpen;
  842.     1: Result := SSave;
  843.   end;
  844. end;
  845.  
  846. function TDXWaveListEditor.GetVerbCount: Integer;
  847. begin
  848.   Result := 2;
  849. end;
  850.  
  851. {  TForceFeedbackEffectsProperty  }
  852.  
  853. procedure TForceFeedbackEffectsProperty.Edit;
  854. var
  855.   Form: TDelphiXFFEditForm;
  856.   Effects: TForceFeedbackEffects;
  857. begin
  858.   Effects := TForceFeedbackEffects(GetOrdValue);
  859.  
  860.   Form := TDelphiXFFEditForm.Create(nil);
  861.   try
  862.     if Effects.Input is TJoystick then
  863.       Form.Effects := Form.DXInput.Joystick.Effects
  864.     else if Effects.Input is TKeyboard then
  865.       Form.Effects := Form.DXInput.Keyboard.Effects
  866.     else if Effects.Input is TMouse then
  867.       Form.Effects := Form.DXInput.Mouse.Effects
  868.     else Exit;
  869.  
  870.     Form.Effects.Assign(TForceFeedbackEffects(GetOrdValue));
  871.     Form.ShowModal;
  872.     if Form.Tag <> 0 then
  873.     begin
  874.       SetOrdValue(Integer(Form.Effects));
  875.       Designer.Modified;
  876.     end;
  877.   finally
  878.     Form.Free;
  879.   end;
  880. end;
  881.  
  882. function TForceFeedbackEffectsProperty.GetAttributes: TPropertyAttributes;
  883. begin
  884.   Result := [paDialog, paReadOnly];
  885. end;
  886.  
  887. function TForceFeedbackEffectsProperty.GetValue: string;
  888. begin
  889.   if TForceFeedbackEffects(GetOrdValue).Count = 0 then
  890.     Result := SNone
  891.   else
  892.     Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  893. end;
  894.  
  895. {  TDXInputEditor  }
  896.  
  897. procedure TDXInputEditor.Edit;
  898. var
  899.   Form: TDelphiXInputEditForm;
  900. begin
  901.   Form := TDelphiXInputEditForm.Create(nil);
  902.   try
  903.     Form.DXInput := TCustomDXInput(Component);
  904.     Form.ShowModal;
  905.     if Form.Tag <> 0 then
  906.       Designer.Modified;
  907.   finally
  908.     Form.Free;
  909.   end;
  910. end;
  911.  
  912. procedure TDXInputEditor.ExecuteVerb(Index: Integer);
  913. begin
  914.   case Index of
  915.     0: begin
  916.         with TCustomDXInput(Component) do
  917.         begin
  918.           Joystick.ID := 0;
  919.           Keyboard.KeyAssigns := DefKeyAssign;
  920.         end;
  921.         Designer.Modified;
  922.       end;
  923.     1: begin
  924.         with TCustomDXInput(Component) do
  925.         begin
  926.           Joystick.ID := 0;
  927.           Keyboard.KeyAssigns := DefKeyAssign2_1;
  928.         end;
  929.         Designer.Modified;
  930.       end;
  931.     2: begin
  932.         with TCustomDXInput(Component) do
  933.         begin
  934.           Joystick.ID := 1;
  935.           Keyboard.KeyAssigns := DefKeyAssign2_2;
  936.         end;
  937.         Designer.Modified;
  938.       end;
  939.   end;
  940. end;
  941.  
  942. function TDXInputEditor.GetVerb(Index: Integer): string;
  943. begin
  944.   case Index of
  945.     0: Result := SSinglePlayer;
  946.     1: Result := SMultiPlayer1;
  947.     2: Result := SMultiPlayer2;
  948.   end;
  949. end;
  950.  
  951. function TDXInputEditor.GetVerbCount: Integer;
  952. begin
  953.   Result := 3;
  954. end;
  955.  
  956. {  TGUIDProperty  }
  957.  
  958. procedure TGUIDProperty.Edit;
  959. var
  960.   Form: TDelphiXGUIDEditForm;
  961. begin
  962.   Form := TDelphiXGUIDEditForm.Create(nil);
  963.   try
  964.     Form.GUID := GetStrValue;
  965.     Form.ShowModal;
  966.     if Form.Tag <> 0 then
  967.     begin
  968.       SetStrValue(Form.GUID);
  969.       Designer.Modified;
  970.     end;
  971.   finally
  972.     Form.Free;
  973.   end;
  974. end;
  975.  
  976. function TGUIDProperty.GetAttributes: TPropertyAttributes;
  977. begin
  978.   Result := inherited GetAttributes + [paDialog];
  979. end;
  980.  
  981. { TSpriteProperty }
  982.  
  983. procedure TSpriteProperty.Edit;
  984. var
  985.   DirectAccessToSprite: TSprite;
  986.   Form: TDelphiXSpriteEditForm;
  987.   //FormDesigner: IDesigner;
  988. begin
  989.   DirectAccessToSprite := TSprite(GetOrdValue);
  990.   //FormDesigner := Designer;
  991.   Form := TDelphiXSpriteEditForm.Create(nil);
  992.   {FormDesigner.GetComponentNames(GetTypeData(GetPropType), Proc);}
  993.   try
  994.     Form.LoadDataToForm(DirectAccessToSprite);
  995.     //Form.Sprite.AsSign(TPersistent(GetOrdValue));
  996.     Form.ShowModal;
  997.     if Form.Tag <> 0 then
  998.     begin
  999.       DirectAccessToSprite := TSprite(Form.SaveDataFromForm);
  1000.       SetOrdValue(Integer(DirectAccessToSprite));
  1001.       Designer.Modified;
  1002.     end;
  1003.   finally
  1004.     Form.Free;
  1005.   end;
  1006. end;
  1007.  
  1008. function TSpriteProperty.GetAttributes: TPropertyAttributes;
  1009. begin
  1010.   Result := [paDialog];
  1011. end;
  1012.  
  1013. function TSpriteProperty.GetValue: string;
  1014. begin
  1015.   Result := Format('(%s)', [TObject(GetOrdValue).ClassName]);
  1016. end;
  1017.  
  1018. {  TMidiProperty  }
  1019.  
  1020. procedure TMidiProperty.Edit;
  1021. var
  1022.   DelphiXMidiEditForm: TDelphiXMidiEditForm;
  1023.   DirectAccessToMidiData: TMusicDataProp;
  1024.   S: string; I: Integer;
  1025. begin
  1026.   DirectAccessToMidiData := TMusicDataProp(GetOrdValue);
  1027.   DelphiXMidiEditForm := TDelphiXMidiEditForm.Create(nil);
  1028.   try
  1029.     DelphiXMidiEditForm.MidiData := DirectAccessToMidiData.MusicData;
  1030.     DelphiXMidiEditForm.MidiFileName := DirectAccessToMidiData.MidiName;
  1031.     DelphiXMidiEditForm.Showmodal;
  1032.     if DelphiXMidiEditForm.Tag = 1 then begin
  1033.       DirectAccessToMidiData.MusicData := DelphiXMidiEditForm.MidiData;
  1034.       S := '';
  1035.       if DelphiXMidiEditForm.MidiFileName <> '' then begin
  1036.         S := ExtractFileName(DelphiXMidiEditForm.MidiFileName);
  1037.         I := Pos(ExtractFileExt(S), S);
  1038.         if I > 0 then S := Copy(S, 1, I - 1);
  1039.       end;
  1040.       DirectAccessToMidiData.MidiName := S;
  1041.       Designer.Modified;
  1042.     end;
  1043.   finally
  1044.     DelphiXMidiEditForm.Free;
  1045.   end;
  1046. end;
  1047.  
  1048. function TMidiProperty.GetAttributes: TPropertyAttributes;
  1049. begin
  1050.   Result := [paDialog];
  1051. end;
  1052.  
  1053. function TMidiProperty.GetValue: string;
  1054. var
  1055.   S: string;
  1056. begin
  1057.   S := TMusicDataProp(GetOrdValue).MusicData;
  1058.   if Length(S) = 0 then
  1059.     Result := SNone
  1060.   else
  1061.     Result := '(Midi)';
  1062. end;
  1063.  
  1064. {$IFDEF VER6UP}
  1065. procedure TMidiEditor.EditProperty(const Prop: IProperty; var Continue: Boolean);
  1066. {$ELSE}
  1067. procedure TMidiEditor.EditProperty(PropertyEditor: TPropertyEditor;
  1068.   var continue, FreeEditor: Boolean);
  1069. {$ENDIF}
  1070. var
  1071.   PropName: string;
  1072. begin
  1073.   PropName := {$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.GetName;
  1074.   if (CompareText(PropName, 'Midi') = 0) then
  1075.   begin
  1076. {$IFDEF VER6UP}Prop{$ELSE}PropertyEditor{$ENDIF}.edit;
  1077.     continue := false;
  1078.   end;
  1079. end;
  1080.  
  1081. { TDXMidiListEditor }
  1082.  
  1083. procedure TDXMidiListEditor.ExecuteVerb(Index: Integer);
  1084. var
  1085.   OpenDialog: TOpenDialog;
  1086.   SaveDialog: TSaveDialog;
  1087.   i: Integer;
  1088. begin
  1089.   case Index of
  1090.     0: begin
  1091.         OpenDialog := TOpenDialog.Create(nil);
  1092.         try
  1093.           OpenDialog.DefaultExt := 'dxm';
  1094.           OpenDialog.Filter := SDXMOpenFileFilter;
  1095.           OpenDialog.Options := [ofPathMustExist, ofFileMustExist, ofAllowMultiSelect];
  1096.           if OpenDialog.Execute then
  1097.           begin
  1098.             if OpenDialog.FilterIndex = 2 then
  1099.             begin
  1100.               for i := 0 to OpenDialog.Files.Count - 1 do
  1101.                 with TMusicListCollectionItem.Create(TDXMusic(Component).Midis) do
  1102.                 begin
  1103.                   try
  1104.                     LoadFromFile(OpenDialog.Files[i]);
  1105.                     Name := ExtractFileName(OpenDialog.Files[i]);
  1106.                   except
  1107.                     Free;
  1108.                     raise;
  1109.                   end;
  1110.                 end;
  1111.             end
  1112.             else
  1113.               TDXMusic(Component).Midis.LoadFromFile(OpenDialog.FileName);
  1114.             Designer.Modified;
  1115.           end;
  1116.         finally
  1117.           OpenDialog.Free;
  1118.         end;
  1119.       end;
  1120.     1: begin
  1121.         SaveDialog := TSaveDialog.Create(nil);
  1122.         try
  1123.           SaveDialog.DefaultExt := 'dxm';
  1124.           SaveDialog.Filter := SDXMFileFilter;
  1125.           SaveDialog.Options := [ofOverwritePrompt, ofPathMustExist];
  1126.           if SaveDialog.Execute then
  1127.             TCustomDXWaveList(Component).Items.SaveToFile(SaveDialog.FileName);
  1128.         finally
  1129.           SaveDialog.Free;
  1130.         end;
  1131.       end;
  1132.   end;
  1133. end;
  1134.  
  1135. function TDXMidiListEditor.GetVerbCount: Integer;
  1136. begin
  1137.   Result := 2;
  1138. end;
  1139.  
  1140. function TDXMidiListEditor.GetVerb(Index: Integer): string;
  1141. begin
  1142.   case Index of
  1143.     0: Result := SOpen;
  1144.     1: Result := SSave;
  1145.   end;
  1146. end;
  1147.  
  1148. { TDXSpriteEngineEditor }
  1149.  
  1150. procedure TDXSpriteEngineEditor.ListBox1DblClick(Sender: TObject);
  1151. begin
  1152.   if Sender is TListBox then with (Sender as TListBox) do
  1153.     if ItemIndex <> -1 then
  1154.       (Owner as TForm).ModalResult := mrOk;
  1155. end;
  1156.  
  1157. procedure TDXSpriteEngineEditor.ExecuteVerb(Index: Integer);
  1158. var
  1159.   FrmListBox: TForm;
  1160.   ListBox1: TListBox;
  1161.   DelphiXSpriteEditForm: TDelphiXSpriteEditForm;
  1162.   ASprite: TSprite;
  1163.   I, Z: Integer;
  1164.   S: string;
  1165.   Q: TCustomDXSpriteEngine;
  1166. begin
  1167.   case Index of
  1168.     0: begin
  1169.         FrmListBox := nil;
  1170.         Z := 0; //default value
  1171.         DelphiXSpriteEditForm := TDelphiXSpriteEditForm.Create(nil);
  1172.         try
  1173.           Q := TCustomDXSpriteEngine(Component);
  1174.           case Q.Items.Count of
  1175.             0: begin
  1176.               ShowMessage('You must create any item of sprite first!');
  1177.               Exit;
  1178.             end;
  1179.             1: ASprite := Q.Items[Z].Sprite;
  1180.           else
  1181.             FrmListBox := CreateListBox(ListBox1DblClick, ListBox1);
  1182.             for I := 0 to Q.Items.Count - 1 do begin
  1183.               S := Q.Items[I].Name;
  1184.               ListBox1.Items.Add(Alter(S, '(unnamed).' + IntToStr(I)));
  1185.             end;
  1186.             if FrmListBox.ShowModal <> mrOk then Exit;
  1187.             Z := ListBox1.ItemIndex;
  1188.             if Z = -1 then Exit;
  1189.             ASprite := Q.Items[Z].Sprite;
  1190.             {synchronize of names}
  1191.             if ASprite.Caption = '' then
  1192.               if Q.Items[ListBox1.ItemIndex].Name <> '' then
  1193.                 ASprite.Caption := Q.Items[Z].Name;
  1194.           end {case};
  1195.           DelphiXSpriteEditForm.LoadDataToForm(ASprite);
  1196.           DelphiXSpriteEditForm.ShowModal;
  1197.           if DelphiXSpriteEditForm.Tag <> 0 then begin
  1198.             ASprite := TSprite(DelphiXSpriteEditForm.SaveDataFromForm);
  1199.             if Q.Items[Z].Name = '' then
  1200.               if ASprite.Caption <> '' then
  1201.                 Q.Items[Z].Name := ASprite.Caption;
  1202.             Designer.Modified;
  1203.           end;
  1204.         finally
  1205.           if Assigned(FrmListBox) then FrmListBox.Free;
  1206.           DelphiXSpriteEditForm.Free;
  1207.         end;
  1208.       end;
  1209.   end;
  1210. end;
  1211.  
  1212. function TDXSpriteEngineEditor.GetVerbCount: Integer;
  1213. begin
  1214.   Result := 1;
  1215. end;
  1216.  
  1217. function TDXSpriteEngineEditor.GetVerb(Index: Integer): string;
  1218. begin
  1219.   case Index of
  1220.     0: Result := 'Sprite Editor';
  1221.   end;
  1222. end;
  1223.  
  1224. { TDXDrawEditor }
  1225.  
  1226. procedure TDXDrawEditor.ExecuteVerb(Index: Integer);
  1227. var
  1228.   ediform: TDelphiXPathsEditForm;
  1229.   Q: TCustomDXDraw;
  1230.   I: Integer;
  1231.   S: string;
  1232.   T: TTrace;
  1233.   {$IFNDEF VER4UP}
  1234.   H: TTrace;
  1235.   J: Integer;
  1236.   {$ENDIF}
  1237. begin
  1238.   case Index of
  1239.     0: begin
  1240.       Q := TCustomDXDraw(Component);
  1241.       {paths editor}
  1242.       ediform := TDelphiXPathsEditForm.Create(nil);
  1243.       try
  1244.         ediform.Pane.Width := Q.Display.Width;
  1245.         ediform.Pane.Height := Q.Display.Width;
  1246.         for I := 0 to Q.Traces.Count - 1 do begin
  1247.           S := Q.Traces.Items[I].Name;
  1248.           T := ediform.PrivateTraces.Add;
  1249.           T.Name := S;
  1250.           {$IFDEF VER4UP}
  1251.           T.Assign(Q.Traces.Items[I]);
  1252.           {$ELSE}
  1253.           T.Blit := Q.Traces.Items[I].Blit;
  1254.           {$ENDIF}
  1255.           if Trim(S) = '' then S := Format('(unnamed[%d])', [I]);
  1256.           ediform.cbListOfTraces.Items.Add(S);
  1257.         end;
  1258.         ediform.ShowTracesOnPane;
  1259.  
  1260.         ediform.ShowModal;
  1261.  
  1262.         if ediform.Tag = 1 then begin
  1263.           {clear traces}
  1264.           Q.Traces.Clear;
  1265.           {rewrite backward}
  1266.           for i := 0 to ediform.PrivateTraces.Count -1 do begin
  1267.             T := Q.Traces.Add;
  1268.             T.Name := ediform.PrivateTraces.Items[I].Name;
  1269.             {$IFDEF VER4UP}
  1270.             T.Assign(ediform.PrivateTraces.Items[i]);
  1271.             {$ELSE}
  1272.             H := ediform.PrivateTraces.Items[i];
  1273.             T.Blit := H.Blit;
  1274.             T.Blit.SetPathLen(H.Blit.GetPathCount);
  1275.             for J := 0 to H.Blit.GetPathCount - 1 do begin
  1276.               T.Blit.Path[J] := H.Blit.Path[J]
  1277.             end
  1278.             {$ENDIF}
  1279.           end;
  1280.           {prepis zmeny}
  1281.           Designer.Modified;
  1282.         end;
  1283.       finally
  1284.         ediform.Free;
  1285.       end;
  1286.     end;
  1287.   end;
  1288. end;
  1289.  
  1290. function TDXDrawEditor.GetVerbCount: Integer;
  1291. begin
  1292.   Result := 1;
  1293. end;
  1294.  
  1295. function TDXDrawEditor.GetVerb(Index: Integer): string;
  1296. begin
  1297.   case Index of
  1298.     0: Result := 'Traces Editor';
  1299.   end;
  1300. end;
  1301.  
  1302. end.