Subversion Repositories spacemission

Rev

Blame | Last modification | View Log | RSS feed

  1. unit DXMapEdit;
  2. //(c)2007 Jaro Benes
  3. //All Rights Reserved
  4.  
  5. {
  6. Complex application for users of unDelphiX as component editor:
  7.  
  8. Supported:
  9.  a) create image map and store it into rersource.
  10.  b) allow do change.
  11.  c) controll map by each chip.
  12.  
  13. }
  14. interface
  15. {$INCLUDE DelphiXcfg.inc}        
  16. uses
  17.   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  18.   Dialogs, StdCtrls, ExtCtrls, Buttons, {$IFDEF VER4UP}ImgList,{$ENDIF}
  19.   Grids, Menus, DXMapEditProperties, Spin,
  20.   DXSprite, DXClass, DXDraws{$IfNDef StandardDX}, DirectX{$EndIf}, DIB;
  21.  
  22. type
  23.   {injected class}
  24.  
  25.   {  TEdit  }
  26.  
  27.   TEdit = class(StdCtrls.TEdit)
  28.   private
  29.     function GetAsInteger: Integer;
  30.     procedure SetAsInteger(const Value: Integer);
  31.   published
  32.   public
  33.     property AsInteger: Integer read GetAsInteger write SetAsInteger;
  34.   end;
  35.  
  36.   {  TDrawGrid  }
  37.  
  38. //  TDrawGrid = class(Grids.TDrawGrid)
  39. //    procedure CMMouseEnter(var Msg: TMessage); message CM_MouseEnter;
  40. //    procedure CMMouseLeave(var Msg: TMessage); message CM_MouseLeave;
  41. //  end;
  42.  
  43.   {  TDelphiXMapEditForm  }
  44.  
  45.   TDelphiXMapEditForm = class(TForm)
  46.     pblBase: TPanel;
  47.     LHeight: TLabel;
  48.     LMapSizeX: TLabel;
  49.     LMapSizeY: TLabel;
  50.     EHeight: TEdit;
  51.     EWidth: TEdit;
  52.     eMapSizeX: TSpinEdit;
  53.     eMapSizeY: TSpinEdit;
  54.     OKButton: TButton;
  55.     CancelButton: TButton;
  56.     LWidth: TLabel;
  57.     ImageToSet: TComboBox;
  58.     LImageToSet: TLabel;
  59.     ScrollBox1: TScrollBox;
  60.     BtnSetSize: TSpeedButton;
  61.     PicturesToChip: TListBox;
  62.     LPicturesToChip: TLabel;
  63.     MapArea: TDrawGrid;
  64.     PopupMenu1: TPopupMenu;
  65.     Fillall1: TMenuItem;
  66.     PopupMenu2: TPopupMenu;
  67.     Clear1: TMenuItem;
  68.     LAreaOfChips: TLabel;
  69.     ClearOneChip1: TMenuItem;
  70.     DelphiXMapEditPropertiesPane: TPanel;
  71.     pnlRight: TPanel;
  72.     pnlLeft: TPanel;
  73.     pnlLabels: TPanel;
  74.     Panel1: TPanel;
  75.     Splitter1: TSplitter;
  76.     procedure OKButtonClick(Sender: TObject);
  77.     procedure MapAreaDblClick(Sender: TObject);
  78.     procedure ClearOneChip1Click(Sender: TObject);
  79.     procedure PopupMenu1Popup(Sender: TObject);
  80.     procedure PopupMenu2Popup(Sender: TObject);
  81.     procedure Clear1Click(Sender: TObject);
  82.     procedure Fillall1Click(Sender: TObject);
  83.     procedure MapAreaMouseMove(Sender: TObject; Shift: TShiftState; X,
  84.       Y: Integer);
  85.     procedure ImageToSetChange(Sender: TObject);
  86.     procedure FormDestroy(Sender: TObject);
  87.     procedure PicturesToChipDrawItem(Control: TWinControl; Index: Integer;
  88.       Rect: TRect; State: TOwnerDrawState);
  89.     procedure PicturesToChipMeasureItem(Control: TWinControl; Index: Integer;
  90.       var Height: Integer);
  91.     procedure FormCreate(Sender: TObject);
  92.     procedure MapAreaDrawCell(Sender: TObject; ACol, ARow: Integer;
  93.       Rect: TRect; State: TGridDrawState);
  94.     procedure MapAreaDragOver(Sender, Source: TObject; X, Y: Integer;
  95.       State: TDragState; var Accept: Boolean);
  96.     procedure BtnSetSizeClick(Sender: TObject);
  97.     procedure MapAreaDragDrop(Sender, Source: TObject; X, Y: Integer);
  98.     procedure MapAreaMouseDown(Sender: TObject; Button: TMouseButton;
  99.       Shift: TShiftState; X, Y: Integer);
  100.   private
  101.     { Private declarations }
  102.     DIB: TDIB;
  103.     maparea_X, maparea_Y: Integer;
  104.     pct: TDXPictureClip;
  105.     FocusPopUpPositionCol, FocusPopUpPositionRow: Integer;
  106.     DragPositionCol, DragPositionRow: Integer;
  107.     DelphiXMapEditPropertiesForm: TDelphiXMapEditPropertiesForm;
  108.     procedure MapTypeDefaultValuesByObject(out MapType: TMapType);
  109.   public
  110.     DXBackgroundSprite: TBackgroundSprite;
  111.     DXImageList: TCustomDXImageList; //instance only
  112.     function LoadSplittedImage(ClearContentOfMapArea: Boolean{$IFDEF VER4UP} = False{$ENDIF}): Boolean;
  113.     procedure ResizeMapArea;
  114.   end;
  115.  
  116. var
  117.   DelphiXMapEditForm: TDelphiXMapEditForm;
  118.  
  119. implementation
  120.  
  121. {$R *.dfm}
  122.  
  123. { TEdit }
  124.  
  125. function TEdit.GetAsInteger: Integer;
  126. begin
  127.   try
  128.     Result := StrToInt(Self.Text);
  129.   except
  130.     Result := 0;
  131.   end;
  132. end;
  133.  
  134. procedure TEdit.SetAsInteger(const Value: Integer);
  135. begin
  136.   Self.Text := IntToStr(Value)
  137. end;
  138.  
  139. { TDrawGrid  }
  140.  
  141. //procedure TDrawGrid.CMMouseEnter(var Msg: TMessage);
  142. //begin
  143. //
  144. //end;
  145. //
  146. //procedure TDrawGrid.CMMouseLeave(var Msg: TMessage);
  147. //begin
  148. //end;
  149.  
  150. //------------------------------------------------------------------------------
  151.  
  152. {TDelphiXMapEditForm}
  153.  
  154. procedure TDelphiXMapEditForm.MapAreaDragDrop(Sender, Source: TObject; X,
  155.   Y: Integer);
  156. var
  157.   DropPositionCol, DropPositionRow: Integer;
  158. begin
  159.   MapArea.MouseToCell(X, Y, DropPositionCol, DropPositionRow); // convert mouse coord.
  160.   if Source is TListBox then begin
  161.     if Sender is TDrawGrid then
  162.       with Sender as TDrawGrid do begin
  163.         with DXBackgroundSprite do
  164.           Chips[DropPositionCol, DropPositionRow] := (Source as TListBox).ItemIndex;
  165.         Invalidate;
  166.       end;
  167.   end
  168.   else
  169.     if Source is TDrawGrid then begin
  170.       if Sender is TDrawGrid then
  171.         if (DropPositionCol <> DragPositionCol) or (DropPositionRow <> DragPositionRow) then
  172.           with Sender as TDrawGrid do begin
  173.             with DXBackgroundSprite do
  174.               Map[DropPositionCol, DropPositionRow] := Map[DragPositionCol, DragPositionRow];
  175.             Invalidate;
  176.           end;
  177.     end;
  178. end;
  179.  
  180. procedure TDelphiXMapEditForm.MapAreaDragOver(Sender, Source: TObject; X,
  181.   Y: Integer; State: TDragState; var Accept: Boolean);
  182. var
  183.   CurrentCol, CurrentRow: Integer;
  184. begin
  185.   MapArea.MouseToCell(X, Y, CurrentCol, CurrentRow); // convert mouse coord.
  186.   Accept := ((Source = PicturesToChip) or (Source = Sender))
  187.   { Accept dragged stuff only when the mouse is now over an acceptable region }
  188.   and (CurrentCol >= 0) and (CurrentRow >= 0);
  189.   if Source = Sender then
  190.     MapArea.SetFocus;
  191. end;
  192.  
  193. procedure TDelphiXMapEditForm.MapAreaDrawCell(Sender: TObject; ACol,
  194.   ARow: Integer; Rect: TRect; State: TGridDrawState);
  195. var
  196.   TmpRect: TRect;
  197.   A: array[1..255] of Char;
  198. begin
  199.   with MapArea.Canvas do begin
  200.     FillRect(Rect);
  201.     if pct.IsEmpty then Exit;
  202.     with DXBackgroundSprite do begin
  203.       DIB.SetSize(pct.Width, pct.Height, 24);
  204.       pct.Draw(DIB.Canvas, 0, 0, Chips[ACol, ARow]);
  205.       if gdFocused in State then begin
  206.         DIB.DoDarkness(80);
  207.       end
  208.       else begin
  209.         if CollisionMap[ACol, ARow] then
  210.           DIB.Darker(50)
  211.       end;
  212.       if Map[ACol, ARow].MirrorFlip <> [] then DIB.Mirror(rmfMirror in Map[ACol, ARow].MirrorFlip, rmfFlip in Map[ACol, ARow].MirrorFlip);
  213.       Draw(Rect.Left, Rect.Top, DIB);
  214.     end;
  215.     if gdFocused in State then
  216.     begin
  217.       if goDrawFocusSelected in MapArea.Options then
  218.         Pen.Color := clHighlight
  219.       else
  220.         Pen.Color := MapArea.Color;
  221.       Brush.Style := bsClear;
  222. {$IFDEF VER5UP}
  223.       Rectangle(Rect); InFlateRect(Rect, -1, -1); Rectangle(Rect);
  224. {$ELSE}
  225.       Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom); InFlateRect(Rect, -1, -1);Rectangle(Rect.Left, Rect.Top, Rect.Right, Rect.Bottom);
  226. {$ENDIF}
  227.     end;
  228.     with DXBackgroundSprite do begin
  229.       Font.Name := 'Arial';
  230.       Font.Size := 9;
  231.       Font.Color := clHighlightText;
  232.       Brush.Style := bsClear;
  233.       TmpRect := Rect;
  234.       TmpRect.Bottom := TmpRect.Bottom - ((TmpRect.Bottom - TmpRect.Top) div 2);
  235.       if CollisionMap[ACol, ARow] then
  236.         DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'brick'), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
  237.       TmpRect := Rect;
  238.       TmpRect.Top := TmpRect.Bottom - ((TmpRect.Bottom - TmpRect.Top) div 2);
  239.       case Map[ACol, ARow].Rendered of
  240.         rtDraw: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'D:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
  241.         rtBlend: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'B:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
  242.         rtAdd: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'A:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
  243.         rtSub: DrawText(MapArea.Canvas.Handle, StrPCopy(@A, 'S:' + IntToStr(Map[ACol, ARow].Alpha)), -1, TmpRect, dt_SingleLine or dt_Center or dt_VCenter);
  244.       end
  245.     end;
  246.   end;
  247. end;
  248.  
  249. procedure TDelphiXMapEditForm.FormCreate(Sender: TObject);
  250. begin
  251.   DelphiXMapEditPropertiesForm := TDelphiXMapEditPropertiesForm.Create(Self);
  252.   DelphiXMapEditPropertiesForm.Parent := DelphiXMapEditPropertiesPane;
  253.   DelphiXMapEditPropertiesForm.ParentWindow := Self.DelphiXMapEditPropertiesPane.Handle;
  254.   DelphiXMapEditPropertiesForm.Top := 0;
  255.   DelphiXMapEditPropertiesForm.Left := 0;
  256.   DelphiXMapEditPropertiesForm.BorderStyle := bsNone;
  257.   DelphiXMapEditPropertiesForm.Align := alClient;
  258.   {nothing selected}
  259.   FocusPopUpPositionCol := -1;
  260.   FocusPopUpPositionRow := -1;
  261.   DIB := TDIB.Create;
  262.   pct := TDXPictureClip.Create(nil);
  263. {$IFDEF VER4UP}
  264.   MapArea.DoubleBuffered := True;
  265. {$ENDIF}
  266. end;
  267.  
  268. procedure TDelphiXMapEditForm.PicturesToChipMeasureItem(Control: TWinControl;
  269.   Index: Integer; var Height: Integer);
  270. begin
  271.   Height := pct.Height;
  272. end;
  273.  
  274. procedure TDelphiXMapEditForm.ResizeMapArea;
  275. {$IFNDEF VER4UP}
  276. type
  277.   TOldMap = array[0..0, 0..0] of TMapType;
  278.   POldMap = ^TOldMap;
  279. {$ENDIF}
  280. var
  281. {$IFDEF VER4UP}
  282.   oldmap: array of array of TMapType;
  283. {$ELSE}
  284.   oldmap: POldMap;
  285. {$ENDIF}
  286.   i, j, oldw, oldh: Integer;
  287.   MapType: TMapType;
  288. begin
  289.   {older size, save old layout}
  290.   oldw := DXBackgroundSprite.MapWidth;
  291.   oldh := DXBackgroundSprite.MapHeight;
  292. {$IFDEF VER4UP}
  293.   SetLength(oldmap, oldw, oldh);
  294. {$ELSE}
  295.   GetMem(oldmap, oldw * oldh * SizeOf(TMapType));
  296.   try
  297. {$ENDIF}
  298.     {old the content of map}
  299.     if not DXBackgroundSprite.IsMapEmpty then
  300.       for i := 0 to oldw - 1 do
  301.         for j := 0 to oldh - 1 do
  302.           oldmap{$IFNDEF VER4UP}^{$ENDIF} [i, j] := DXBackgroundSprite.Map[i, j];
  303.     {size realocation}
  304.     with DXBackgroundSprite do begin
  305.       SetMapSize(eMapSizeX.Value, eMapSizeY.Value);
  306.       {prevent resize of cleared by the content object}
  307.       MapTypeDefaultValuesByObject(MapType);
  308.       for i := 0 to eMapSizeX.Value - 1 do
  309.         for j := 0 to eMapSizeY.Value - 1 do begin
  310.           Chips[i, j] := 0;
  311.           CollisionMap[i, j] := False;
  312.           Map[i, j] := MapType;
  313.         end;
  314.     end;
  315.     {back context}
  316.     for i := 0 to oldw - 1 do
  317.       for j := 0 to oldh - 1 do
  318.         DXBackgroundSprite.Map[i, j] := oldmap{$IFNDEF VER4UP}^{$ENDIF} [i, j];
  319. {$IFNDEF VER4UP}
  320.   finally
  321.     FreeMem(oldmap)
  322.   end;
  323. {$ENDIF}
  324.   MapArea.ColCount := eMapSizeX.Value;
  325.   MapArea.RowCount := eMapSizeY.Value;
  326.   MapArea.Width := eMapSizeX.Value * (EWidth.AsInteger + 1);
  327.   MapArea.Height := eMapSizeY.Value * (EHeight.AsInteger + 1);
  328.   MapArea.Invalidate;
  329. end;
  330.  
  331. procedure TDelphiXMapEditForm.MapTypeDefaultValuesByObject(out MapType: TMapType);
  332. begin
  333.   FillChar(MapType, SizeOf(MapType), 0);
  334.   { default values from owner's object }
  335.   MapType.CollisionChip := DXBackgroundSprite.Collisioned;
  336.   MapType.Overlap := 0;
  337.   MapType.AnimLooped:= DXBackgroundSprite.AnimLooped;
  338.   MapType.AnimStart := DXBackgroundSprite.AnimStart;
  339.   MapType.AnimCount := DXBackgroundSprite.AnimCount;
  340.   MapType.AnimSpeed := DXBackgroundSprite.AnimSpeed;
  341.   MapType.Alpha := DXBackgroundSprite.Alpha;
  342.   MapType.Rendered := DXBackgroundSprite.BlendMode;
  343.   MapType.AnimPos := DXBackgroundSprite.AnimPos;
  344.   MapType.Angle := DXBackgroundSprite.Angle;
  345.   MapType.MirrorFlip := DXBackgroundSprite.MirrorFlip;
  346.   MapType.TextureFilter := DXBackgroundSprite.TextureFilter;
  347.   MapType.CenterX := DXBackgroundSprite.CenterX;
  348.   MapType.CenterY := DXBackgroundSprite.CenterY;
  349. end;
  350.  
  351. procedure TDelphiXMapEditForm.BtnSetSizeClick(Sender: TObject);
  352. begin
  353.   ResizeMapArea
  354. end;
  355.  
  356. procedure TDelphiXMapEditForm.PicturesToChipDrawItem(Control: TWinControl;
  357.   Index: Integer; Rect: TRect; State: TOwnerDrawState);
  358. var
  359.   R: TRect;
  360.   I: Integer;
  361. begin
  362.   with PicturesToChip.Canvas do begin
  363.     if not (odSelected in State) then
  364.       if Odd(Index) then Brush.Color := {$IFDEF VER6UP}clMoneyGreen{$ELSE}clGreen{$ENDIF}
  365.       else Brush.Color := clWhite;
  366.     FillRect(Rect);
  367.     pct.Draw(PicturesToChip.Canvas, Rect.Left, Rect.Top, Index);
  368.     Brush.Style := bsClear;
  369.     R := Rect;
  370.     R.Left := Rect.Left + pct.Width + 2;
  371.     I := Rect.Top + (Rect.Bottom - Rect.Top - PicturesToChip.Canvas.TextHeight(PicturesToChip.Items[index])) div 2;
  372.     TextOut(Rect.Left + pct.Width + 2, I, PicturesToChip.Items[index]);
  373.   end;
  374. end;
  375.  
  376. procedure TDelphiXMapEditForm.FormDestroy(Sender: TObject);
  377. begin
  378.   DIB.Free;
  379.   pct.Free;
  380. end;
  381.  
  382. function TDelphiXMapEditForm.LoadSplittedImage(ClearContentOfMapArea: Boolean): Boolean;
  383. var
  384.   I, V: Integer;
  385. begin
  386.   if (ImageToSet.ItemIndex <> -1) and Assigned(DXImageList) then begin
  387.     DXImageList.Items[ImageToSet.ItemIndex].Restore;
  388.     pct.Picture := DXImageList.Items[ImageToSet.ItemIndex].Picture;
  389.     pct.Width := DXImageList.Items[ImageToSet.ItemIndex].PatternWidth;
  390.     pct.Height := DXImageList.Items[ImageToSet.ItemIndex].PatternHeight;
  391.     EWidth.AsInteger := pct.Width;
  392.     EHeight.AsInteger := pct.Height;
  393.     PicturesToChip.Clear;
  394.     V := DXImageList.Items[ImageToSet.ItemIndex].PatternCount;
  395.     for I := 0 to V - 1 do begin
  396.       PicturesToChip.Items.Add(Format(ImageToSet.Text + ' [%d]', [I]));
  397.     end;
  398.     PicturesToChip.ItemHeight := DXImageList.Items[ImageToSet.ItemIndex].PatternHeight;
  399.     {seznam je videt a take MapArea}
  400.     PicturesToChip.Visible := True;
  401.     {pri zmene obrazku vymazat content!}
  402.     if ClearContentOfMapArea then
  403.       Clear1.Click;
  404.     MapArea.Visible := True;
  405.     MapArea.Invalidate;
  406.     Result := True;
  407.   end
  408.   else
  409.     Result := False;
  410. end;
  411.  
  412. procedure TDelphiXMapEditForm.ImageToSetChange(Sender: TObject);
  413. begin
  414.   if ImageToSet.ItemIndex <> -1 then
  415.   begin
  416.     LoadSplittedImage(True);
  417.   end;
  418. end;
  419.  
  420. procedure TDelphiXMapEditForm.MapAreaMouseDown(Sender: TObject;
  421.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  422. begin
  423.   { Convert mouse coordinates X, Y to to StringGrid related col and row numbers }
  424.   MapArea.MouseToCell(X, Y, DragPositionCol, DragPositionRow);
  425.   { Allow dragging only if an acceptable cell was clicked (cell beyond the fixed column and row) }
  426.   if (Button = mbLeft) and (DragPositionCol >= 0) and (DragPositionRow >= 0) then
  427.   begin
  428.     { Begin dragging after mouse has moved 4 pixels }
  429.     MapArea.BeginDrag(False{$IFDEF VER4UP}, 2{$ENDIF});
  430.   end;
  431. end;
  432.  
  433. procedure TDelphiXMapEditForm.MapAreaMouseMove(Sender: TObject;
  434.   Shift: TShiftState; X, Y: Integer);
  435. var
  436.   FocusPositionCol, FocusPositionRow: Integer;
  437. begin
  438.   maparea_X := X; maparea_Y := Y;
  439.   MapArea.MouseToCell(X, Y, FocusPositionCol, FocusPositionRow);
  440.   if not MapArea.Focused then
  441.     MapArea.SetFocus;
  442.   MapArea.Row := FocusPositionRow;
  443.   MapArea.Col := FocusPositionCol;
  444. end;
  445.  
  446. procedure TDelphiXMapEditForm.Fillall1Click(Sender: TObject);
  447. var
  448.   i, j: Integer;
  449. begin
  450.   if PicturesToChip.ItemIndex <> -1 then
  451.   begin
  452.     with DXBackgroundSprite do
  453.       for i := 0 to MapArea.ColCount - 1 do
  454.         for j := 0 to MapArea.RowCount - 1 do
  455.           Chips[i, j] := PicturesToChip.ItemIndex;
  456.     MapArea.Invalidate;
  457.   end;
  458. end;
  459.  
  460. procedure TDelphiXMapEditForm.Clear1Click(Sender: TObject);
  461. var
  462.   i, j: Integer;
  463.   MapType: TMapType;
  464. begin
  465.   MapTypeDefaultValuesByObject(MapType);
  466.   with DXBackgroundSprite do
  467.     for i := 0 to MapArea.ColCount - 1 do
  468.       for j := 0 to MapArea.RowCount - 1 do
  469.       begin
  470.         Chips[i, j] := 0;
  471.         CollisionMap[i, j] := False;
  472.         Map[i, j] := MapType;
  473.       end;
  474.   MapArea.Invalidate;
  475. end;
  476.  
  477. procedure TDelphiXMapEditForm.PopupMenu2Popup(Sender: TObject);
  478. var
  479.   Shift: TShiftState;
  480. begin
  481.   Shift := [];
  482.   MouseMove(Shift, maparea_X, maparea_Y);
  483.   MapArea.MouseToCell(maparea_X, maparea_Y, FocusPopUpPositionCol, FocusPopUpPositionRow);
  484. end;
  485.  
  486. procedure TDelphiXMapEditForm.PopupMenu1Popup(Sender: TObject);
  487. begin
  488.   Fillall1.Enabled := PicturesToChip.ItemIndex <> -1;
  489. end;
  490.  
  491. procedure TDelphiXMapEditForm.ClearOneChip1Click(Sender: TObject);
  492. var
  493.   MapType: TMapType;
  494. begin
  495.   MapTypeDefaultValuesByObject(MapType);
  496.   with DXBackgroundSprite do
  497.   begin
  498.     Map[MapArea.Col, MapArea.Row] := MapType;
  499.   end;
  500.   MapArea.Invalidate;
  501. end;
  502.  
  503. procedure TDelphiXMapEditForm.MapAreaDblClick(Sender: TObject);
  504. begin
  505.   {Reset the flag}
  506.   DelphiXMapEditPropertiesForm.Tag := 0;
  507.   DelphiXMapEditPropertiesForm.Panel2.Color := {$IFDEF VER6UP}clSkyBlue{$ELSE}clBlue{$ENDIF};
  508.   if not DelphiXMapEditPropertiesForm.Showing then
  509.     DelphiXMapEditPropertiesForm.Show;
  510.   Application.ProcessMessages;
  511.   DelphiXMapEditPropertiesForm.Col := MapArea.Col;
  512.   DelphiXMapEditPropertiesForm.Row := MapArea.Row;
  513.   DelphiXMapEditPropertiesForm.LoadCellToForm(DXBackgroundSprite.Map[MapArea.Col, MapArea.Row], MapArea.Col, MapArea.Row);
  514. end;
  515.  
  516. procedure TDelphiXMapEditForm.OKButtonClick(Sender: TObject);
  517. begin
  518.   if DelphiXMapEditPropertiesForm.Tag = 1 then
  519.     DelphiXMapEditPropertiesForm.btnOK.Click;
  520. end;
  521.  
  522. end.