Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.08;
Скачать: CL | DM;

Вниз

Всем доброго времени суток   Найти похожие ветки 

 
Василиус ©   (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)); // &#231;&#224;&#235;&#232;&#226;&#234;&#224;
       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)); // &#231;&#224;&#235;&#232;&#226;&#234;&#224;
       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)); // &#231;&#224;&#235;&#232;&#226;&#234;&#224;
    dec (k);
   ptmp:=pbeg^.pnext;
   dispose (pbeg);
   pbeg:=ptmp;
 end;
end;
end.



Страницы: 1 вся ветка

Текущий архив: 2007.04.08;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.036 c
1-1171561817
Makhanev Alexander
2007-02-15 20:50
2007.04.08
Задача взаимодействия различных программных модулей системы...


2-1174142625
Roman_S
2007-03-17 17:43
2007.04.08
Как создать/удалить ярлык на рабочем столе?


15-1173971063
alx2000
2007-03-15 18:04
2007.04.08
Предложение к администраторам форума.


4-1164017360
001
2006-11-20 13:09
2007.04.08
Подскажите пограмму для мониторинга сообщений чужой программы


3-1169113342
Castlevania
2007-01-18 12:42
2007.04.08
InterBase SQL и память