Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Всем доброго времени суток


Василиус ©   (2007-03-12 20:40:00) 

Существует ли возможность на объекте TImage делать отмену последнего действия?(в программе на нём добавляються круглишочки)....если можно то как? Заранее благодарю


eXPell   (2007-03-15 09:27:00) [1]


> Василиус ©   (14.03.07 21:55) [6]

Может поможет(просто скопируй и посмотри)
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, Menus;

 const maxInd=5000;
       maxIx=300;
       maxIy=300;
type
 ptm=^tm;
 tm=record
   x,y,prcolr:integer;
   pnext:ptm;
 end;
 TForm1 = class(TForm)
   Button3: TButton;
   MainMenu1: TMainMenu;
   N3: TMenuItem;
   procedure Button3Click(Sender: TObject);
   procedure N3Click(Sender: TObject);
   procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
     Shift: TShiftState; X, Y: Integer);
 private
   { Private declarations }
 public
   { Public declarations }
   colorFon, colorOldFon, colorLin, color_1, color_2,color_3,color_4, color_m2 : LongInt;
   LX, LY, ix, jy,erra : LongInt;
   XX, YY :Array[-1..200] of LongInt;
   Nkl :array[0..maxInd] of LongInt;
   AXY:array[0..maxIx,0..maxIy]of longint;
   ptmp,pbeg: ptm;  FilIn, FilOut: file  of Tm;
   BegPrX, BegPrY, EndPrX, EndPrY, MouseX,MouseY,
   XBeg, XEnd,YBeg, NNX, NNY, INkl,YEnd, Xhor, Yvert,k:longint;

 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);

var
 i, j : LongInt;
begin
 Color_1 := $00ffff; // Æåëòûé
 Color_2 := $aca30fa; //
 color_m2:=$03376ff;
 Canvas.Brush.Color := Color_1; // Æåëòûé
 Canvas.Pen.Color := clRed;
 for i:=0 to maxInd do
   Nkl[i]:=0;
 pbeg:=nil;
 k:=0;
 colorOldFon := Canvas.Brush.Color;
 Canvas.Brush.Color := ClBtnFace; //î÷èñòêà âñåãî ïðîñòðàíñòâà ôîðìû
 Canvas.FillRect( Rect( 1,20, Width, Height));
 Canvas.Brush.Color := colorOldFon; //
 XBeg := 30 ;
 YBeg := 25 ;
 Xhor := 20;
 Yvert := 15;
 xEnd := Form1.Width - 20;
 YEnd := Form1.Height - 54;
 LX := xEnd - XBeg;
 LY := YEnd - YBeg;
 NNX := LX div (XHor+1);
 NNY := LY div (Yvert+1);
 for i := 0 to NNX-1 do
   XX[i] := XBeg + i*(XHor+1);
 for i := 0 to NNY-1 do
   YY[i] := YBeg + i*(Yvert+1);
 BegPrX := XBeg -1;
 BegPrY := YBeg -1;
 EndPrX := NNX * (XHor +1) + XBeg;
 EndPrY := NNY * (Yvert+1) + YBeg;
 colorOldFon := Canvas.Brush.Color;
 Canvas.Brush.Color := colorLin; //Ñíèçó áóäóò êàê ëèíèè
 Canvas.FillRect( Rect( BegPrX,BegPrY,EndPrX,EndPrY  ));
 Canvas.Brush.Color := color_1; //
 for i := 0 to NNX-1 do
   for j := 0 to NNY-1 do
     Canvas.FillRect(rect( XX[i], YY[j], XX[i]+Xhor, YY[j]+Yvert)); // çàëèâêà
 Canvas.Brush.Color := colorOldFon; //
end;

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
 Shift: TShiftState; X, Y: Integer);
begin
 MouseX := X;
 MouseY := Y;
 if ((x>=xbeg) and (x


Virgo_Style   (2007-03-14 22:01:00) [2]

Хранить в массиве параметры круглишочков (tm) , при необходимости крайний удалять и перерисовать картинку. Особенно при небольшом количестве круглишочков (tm).

Немецкий подзабыл, английский не знал, поэтому на русском.


Василиус   (2007-03-14 21:55:00) [3]


> Делаеся это так:
> 1. Заводим бизнес-действия: "Нарисовать эллипс", "Нарисовать
> точку", "Нарисовать линию", "Закрасить область" и т.п.
> 2. Заводим стек вызовов бизнес-действий с соответствующими
> параметрами.
> 3. При "отмене" достаём из стека предыдущее бизнес-действие
> и инвертируем его.

а можно вот всё вот это на каком нибудь конкретном примере и не на языке РУССКОМ)


MBo   (2007-03-14 09:06:00) [4]

метафайлы (EMF) представляют собой последовательность графических команд, так что средство уже есть. Остается проигрывать нужное количество команд из метафайла, пропуская отмененное


Ega23   (2007-03-14 09:03:00) [5]

Делаеся это так:
1. Заводим бизнес-действия: "Нарисовать эллипс", "Нарисовать точку", "Нарисовать линию", "Закрасить область" и т.п.
2. Заводим стек вызовов бизнес-действий с соответствующими параметрами.
3. При "отмене" достаём из стека предыдущее бизнес-действие и инвертируем его.


Василиус   (2007-03-14 07:46:00) [6]


> Отмена - будет выглядеть, "помещением" битмапа из списка
> по определенным координатам... думаю мысль понятна. Умней
> высказать не получилось.

а можно поподробнее...


RASkov   (2007-03-12 21:04:00) [7]

> [0] Василиус ©   (12.03.07 20:40)

Отмену придется реализовывать самому... имхо.
Сохраняй область рисования с координатами в списке, перед самим рисованием....
Отмена - будет выглядеть, "помещением" битмапа из списка по определенным координатам... думаю мысль понятна. Умней высказать не получилось.


trubin   (2007-03-12 20:59:00) [8]


> Существует ли возможность на объекте TImage делать отмену
> последнего действия?


Нет.

Если нужно нечто подобное, надо все делать самому.


Наверх

Титульная страница Поиск, карта сайта Написать письмо