Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика в Delphi - стирание, Графика в Delphi 
:(
    Опции темы
HighTemplar
Дата 3.6.2005, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 17.3.2005

Репутация: нет
Всего: нет



Необходим графический редактор, который рисует примитивы и сохраняет в файл.
На форме втыкнут на всю форму Image1, на котором и соверщается всё это действие. При построении эллипса он не стирается, а как бы заливается второстепенными эллипсами. Я пробовал помудрить со свойствами Pen, вставляя строчку
image1.Canvas.Pen.Mode := pmNotcopy;
но безрезультатно....
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtDlgs, ExtCtrls;

type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Label1: TLabel;
    Edit1: TEdit;
    ColorDialog1: TColorDialog;
    Button1: TButton;
    Button2: TButton;
    Image1: TImage;
    SavePictureDialog1: TSavePictureDialog;
    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
   AnchorX, AnchorY,
   CurX, CurY: Integer;
   B: Boolean;
   
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   AnchorX := X;
   CurX := X;
   AnchorY  := Y;
   CurY := Y;
   B := True;
   case combobox1.ItemIndex of
   2: image1.Canvas.Pixels[CurX,CurY]:=colordialog1.color;
   3: image1.canvas.moveTo(AnchorX,AnchorY);
   end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
   if B then
    begin
     image1.canvas.Pen.Color:=colordialog1.Color;
     image1.canvas.Brush.Color:=colordialog1.Color;
     image1.Canvas.Pen.Mode := pmNotxor;
     image1.Canvas.Pen.Width := strtoint(edit1.Text);
     image1.Canvas.Brush.Style := bsClear;
      case combobox1.ItemIndex of
      0: Canvas.Rectangle(AnchorX, AnchorY, CurX, CurY);
      1: Canvas.Ellipse(AnchorX, AnchorY, CurX, CurY);
      end;
     CurX := X;
     CurY := Y;
     case combobox1.ItemIndex of
     0: image1.Canvas.Rectangle(AnchorX, AnchorY, CurX, CurY);
     1: image1.Canvas.Ellipse(AnchorX, AnchorY, CurX, CurY);
     end;
     end;
end;

procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   if B then
   begin
    B := False;
    case combobox1.ItemIndex of
    3: image1.canvas.LineTo(CurX,CurY);
    end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  colordialog1.Execute;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 begin
if SavePictureDialog1.Execute then
begin
Image1.Picture.SaveToFile(SavePictureDialog1.FileName+'.bmp');
end;
end;
end;

end.


smile
PM MAIL   Вверх
poor_yorik
Дата 3.6.2005, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 12.1.2005
Где: Общаги г. Киева

Репутация: нет
Всего: 8



Попробуй
image1.Canvas.Pen.Mode := pmXor;
либо же
image1.Canvas.Pen.Mode := pmNotXor;
Могут выходить неожиданные результаты со цветами, но зато будет элипс стираться.


--------------------
Семь раз отмерь, один раз - откомпиль.... Семь раз отпей, один раз - отлей... Семь раз отъешь, один раз - не жадничай и другим дай...
PM MAIL YIM   Вверх
s-mike
Дата 4.6.2005, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 425
Регистрация: 16.1.2005
Где: Киев

Репутация: 5
Всего: 16



{$DELPHI}/Demos/Doc/Graphex

Сохранение - TPicture/TGraphic/TBitmap SaveToFile. Одно замечание - TGraphic должен быть конкретным графическим классом (TJpegImage, TMetafile...).
PM MAIL WWW   Вверх
andrej22
Дата 6.6.2005, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 6.6.2005

Репутация: нет
Всего: нет



Вообще то это и моя проблема тоже. Попробуй очистить канвас. Это просто необходимо - залипаться уж точно не будет. А насчет остального - не совсем понял.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.