Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2011, 00:30   #1
shevel97
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 13
По умолчанию Как добавить функцию отмены?

Как добавить функцию отмены в графический редактор (пишется на delphi7)?
shevel97 вне форума Ответить с цитированием
Старый 20.02.2011, 03:10   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. запоминать историю изменений.
2. запоминать состояние после каждого изменения
3. запоминать предыдущее состояние.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.02.2011, 15:05   #3
shevel97
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 13
По умолчанию

а можешь пример кода написать плз?
shevel97 вне форума Ответить с цитированием
Старый 20.02.2011, 15:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пример кода зависит от конкретной ситуации. Мало ли какой у тебя механизм редактора. Универсального UNDO не существует.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.02.2011, 03:02   #5
shevel97
Пользователь
 
Регистрация: 11.02.2011
Сообщений: 13
Восклицание Вот сильно соркращённый код

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus, ColorGrd, ComCtrls, ToolWin, StdCtrls, Spin,
  Buttons, XPMan, ExtDlgs;

type
 ...


  private
    { Private declarations }
  public

    { Public declarations }
  end;

var
  Form1: TForm1;
   r:boolean;
   x0,y0,x2,y2:integer;
   fname:string;
   c:tcolor;
   
implementation

uses Unit2, Unit3, Unit7, Unit8, Unit4, Unit9;

{$R *.dfm}




procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if r then
begin
  if  speedbutton1.Down then
  begin
  image1.Canvas.Pen.Color:=colordialog1.Color;
   Image1.Canvas.LineTo(x, y);
   end;

  if  speedbutton3.Down then
  begin
  image1.Canvas.Pen.Color:=clwhite;
   image1.Canvas.Pen.Width:=spinedit1.Value;
  Image1.Canvas.LineTo(x, y);
   end;
  if   speedbutton4.Down then
begin
image1.Canvas.MoveTo(x0, y0);
Image1.Canvas.LineTo(x2,y2);
Image1.Canvas.MoveTo(x0, y0);
Image1.Canvas.LineTo(x,y);
x2 := x;  y2 :=y;
end;
 if   speedbutton5.Down then
begin
image1.Canvas.Rectangle(x0, y0, x2, y2);
Image1.Canvas.Rectangle(x0, y0,x, y);
x2 := x;  y2 :=y;

end;
  if   speedbutton6.Down then
begin
image1.Canvas.Ellipse(x0, y0, x2, y2);
Image1.Canvas.Ellipse(x0, y0,x, y);
x2 := x;  y2 :=y;

end;
end;
end;

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  r:=true;
if  speedbutton1.Down then

Image1.Canvas.MoveTo(x, y);
  if  speedbutton3.Down then

Image1.Canvas.MoveTo(x, y);
 if   speedbutton4.Down then
begin
x0 := x;	y0 := y;
x2:=x;	y2:=y;
Image1.Canvas.Pen.Mode:=PmNotXor;
end;
 if   speedbutton5.Down then
begin
x0 := x;	y0 := y;
x2:=x;	y2:=y;  
Image1.Canvas.Pen.Mode:=PmNotXor;
end;
 if   speedbutton6.Down then
begin
x0 := x;	y0 := y;
x2:=x;	y2:=y;  
Image1.Canvas.Pen.Mode:=PmNotXor;
end;

 end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin

    if  speedbutton1.Down then
  Image1.Canvas.LineTo(x, y);
   if  speedbutton3.Down then
  Image1.Canvas.LineTo(x, y);
   r:=false;

 if   speedbutton4.Down then
begin
Image1.Canvas.Pen.Mode:=PmCopy;
image1.Canvas.MoveTo(x0, y0);
Image1.Canvas.LineTo(x2,y2);
Image1.Canvas.MoveTo(x0, y0);
Image1.Canvas.LineTo(x,y);
end;
 if   speedbutton5.Down then
begin
Image1.Canvas.Pen.Mode:=PmCopy;
image1.Canvas.Rectangle(x0, y0, x2, y2);
Image1.Canvas.Rectangle(x0, y0, x, y);
end;
if   speedbutton6.Down then
begin
Image1.Canvas.Pen.Mode:=PmCopy;
image1.Canvas.Ellipse(x0, y0, x2, y2);
Image1.Canvas.Ellipse(x0, y0, x, y);
end;

if   speedbutton2.Down then
 begin
c:=image1.canvas.Pixels[x,y];
image1.Canvas.FloodFill(x,y,c,fssurface);
end;
  end;

procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
 Image1.Canvas.Pen.Width := SpinEdit1.Value;
end;


procedure TForm1.N4Click(Sender: TObject);
begin
 if savepicturedialog1.Execute then
   If savepictureDialog1.Filename<>'' Then
   begin
          Image1.Picture.Bitmap.SaveToFile(savePictureDialog1.FileName);
       Form1.Caption:=(savepictureDialog1.Filename+' — SimplePic');
       end;
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
begin
  colordialog1.Execute;
  image1.Canvas.Pen.Color:= colordialog1.Color;
  image1.Canvas.Brush.Color:= colordialog1.Color;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
 image1.Canvas.Brush.Color:=clwhite;
  image1.Canvas.Rectangle(-5,-5,image1.Width+5,image1.Height+5);
  Form1.Caption:=(' Íîâûé ôàéë '+' — SimplePic');
  image1.Canvas.Pen.Color:=clblack;
end;

end.
shevel97 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доделайте программу на Java.Она работает,только нужно функцию одну добавить. EugeneDanceR Помощь студентам 0 09.02.2011 21:06
Добавить функцию в поток vandrouny Win Api 3 07.11.2010 17:41
Добавить в строковый класс функцию Crudelis Общие вопросы C/C++ 7 10.06.2010 17:52
Обработчик Отмены Progs1024 Работа с сетью в Delphi 1 13.12.2009 17:53
добавить функцию, С xalex17 Помощь студентам 3 12.11.2008 03:39