Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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)); // &#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.041 c
15-1173769753
Чапаев
2007-03-13 10:09
2007.04.08
Увольнение по собственному желанию


2-1174024559
rommel
2007-03-16 08:55
2007.04.08
Свойство align


15-1173957819
alex_***
2007-03-15 14:23
2007.04.08
System error. Code 1410. Class already exists


2-1174405501
Lexa11_2002
2007-03-20 18:45
2007.04.08
Как в DLL добавить формы


2-1174432039
koha
2007-03-21 02:07
2007.04.08
Function WinSvc.GetServiceDisplayName





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский