Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
ВнизВсем доброго времени суток Найти похожие ветки
← →
Василиус © (2007-03-12 20:40) [0]Существует ли возможность на объекте TImage делать отмену последнего действия?(в программе на нём добавляються круглишочки)....если можно то как? Заранее благодарю
← →
trubin © (2007-03-12 20:59) [1]
> Существует ли возможность на объекте TImage делать отмену
> последнего действия?
Нет.
Если нужно нечто подобное, надо все делать самому.
← →
RASkov (2007-03-12 21:04) [2]> [0] Василиус © (12.03.07 20:40)
Отмену придется реализовывать самому... имхо.
Сохраняй область рисования с координатами в списке, перед самим рисованием....
Отмена - будет выглядеть, "помещением" битмапа из списка по определенным координатам... думаю мысль понятна. Умней высказать не получилось.
← →
Василиус © (2007-03-14 07:46) [3]
> Отмена - будет выглядеть, "помещением" битмапа из списка
> по определенным координатам... думаю мысль понятна. Умней
> высказать не получилось.
а можно поподробнее...
← →
Ega23 © (2007-03-14 09:03) [4]Делаеся это так:
1. Заводим бизнес-действия: "Нарисовать эллипс", "Нарисовать точку", "Нарисовать линию", "Закрасить область" и т.п.
2. Заводим стек вызовов бизнес-действий с соответствующими параметрами.
3. При "отмене" достаём из стека предыдущее бизнес-действие и инвертируем его.
← →
MBo © (2007-03-14 09:06) [5]метафайлы (EMF) представляют собой последовательность графических команд, так что средство уже есть. Остается проигрывать нужное количество команд из метафайла, пропуская отмененное
← →
Василиус © (2007-03-14 21:55) [6]
> Делаеся это так:
> 1. Заводим бизнес-действия: "Нарисовать эллипс", "Нарисовать
> точку", "Нарисовать линию", "Закрасить область" и т.п.
> 2. Заводим стек вызовов бизнес-действий с соответствующими
> параметрами.
> 3. При "отмене" достаём из стека предыдущее бизнес-действие
> и инвертируем его.
а можно вот всё вот это на каком нибудь конкретном примере и не на языке РУССКОМ)
← →
Virgo_Style © (2007-03-14 22:01) [7]Хранить в массиве параметры круглишочков (tm) , при необходимости крайний удалять и перерисовать картинку. Особенно при небольшом количестве круглишочков (tm).
Немецкий подзабыл, английский не знал, поэтому на русском.
← →
eXPell © (2007-03-15 09:27) [8]
> Василиус © (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<=endPrx) and (y<=EndprY) and (y>=ybeg)) then
begin
if Button = mbLeft then
begin
colorOldFon := Canvas.Brush.Color;
ix := (MouseX-XBeg) div (XHor+1);
jy := (MouseY-YBeg) div (Yvert+1);
INkl:=ix*NNY+jy;
new (ptmp);
ptmp^.pnext:=pbeg;
pbeg:=ptmp;
pbeg^.x:=ix;
pbeg^.y:=jy;
if (k mod 2)=0 then
begin
Canvas.Brush.Color := color_2; //
Canvas.FillRect(rect( XX[ix], YY[jy], XX[ix]+Xhor, YY[jy]+Yvert)); // çàëèâêà
Nkl[INkl]:=1;
pbeg^.prcolr:=1
end
else
begin
pbeg^.prcolr :=2;
Canvas.Brush.Color := color_m2; //
Canvas.FillRect(rect( XX[ix], YY[jy], XX[ix]+Xhor, YY[jy]+Yvert)); // çàëèâêà
Nkl[INkl]:=2;
end;
k:=k+1;
Canvas.Brush.Color := colorOldFon; //
end;
end;
end;
procedure TForm1.N3Click(Sender: TObject);
begin
if pbeg<> nil then
begin
Canvas.Brush.Color := color_1; //
ix:=pbeg^.x;
jy:=pbeg^.y;
Canvas.FillRect(rect( XX[ix], YY[jy], XX[ix]+Xhor, YY[jy]+Yvert)); // çàëèâêà
dec (k);
ptmp:=pbeg^.pnext;
dispose (pbeg);
pbeg:=ptmp;
end;
end;
end.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.034 c