Главная страница
    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.034 c
2-1174149356
Malik
2007-03-17 19:35
2007.04.08
Вопрос про канву принтера


2-1174337702
Леонид
2007-03-19 23:55
2007.04.08
Пать к файлу


2-1173949007
Choco
2007-03-15 11:56
2007.04.08
фильтр не работает


15-1173685003
Nic (from SAF)
2007-03-12 10:36
2007.04.08
FastMM пишет, что здесь утечка памяти


3-1169047570
ПВ
2007-01-17 18:26
2007.04.08
Проблемы BDE+Paradox под терминальным сервером





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский