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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Исчезают линии нарисованные в OnPaint 
V
    Опции темы
_Buch
Дата 12.12.2007, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не смотря на то что рисую в OnPaint, нарисованное стирается после сворачивания.
В первом случае нужно нарисовать много параллельных линий. Если рисовать так, то всё гуд:
Код

procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
  Brush.Color:=RGB(255,128,0);
  Polygon(zabor);
  MoveTo(44, 248);
  LineTo(44, 398);
  MoveTo(88, 248);
  LineTo(88, 398);

end;


Если применить цикл, то линии исчезают после сворачивания программы или вывода её за границы экрана:
Код

procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
  Brush.Color:=RGB(255,128,0);
  Polygon(zabor);

  for i:=1 to 40 do begin
  Stretch:=true;
  MoveTo(z, 248);
  LineTo(z, 398);
  z:=z+44;
  end;

end;


Во втором случае используется заливка внутри границы методом FloodFill. И при вышеозначенных операциях она стирается и заменяется на цвет фона.
Код

var
 p1: array[1..4] of TPoint = (
   (x:690; y:280),
   (x:695; y:210),
   (x:735; y:210),
   (x:740; y:280)
   );

procedure TForm1.FormPaint(Sender: TObject);
var i: integer;
begin
  with Canvas do begin
   Pen.Color := clblack; 
   PolyBezier(p1);
   MoveTo(p1[1].X, p1[1].Y); LineTo(p1[4].X, p1[4].Y);
   Brush.Color:=clwhite;
   FloodFill(p1[4].X-1, p1[4].Y-1,clblack,fsBorder);
   end;
end;

PM MAIL WWW ICQ   Вверх
MetalFan
Дата 12.12.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

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



Цитата(_Buch @  12.12.2007,  03:18 Найти цитируемый пост)
  z:=z+44;

а где сброс значения переменной?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
baldina
Дата 12.12.2007, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Вставь z := 0; перед циклом
PM MAIL   Вверх
_Buch
Дата 12.12.2007, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это есть, просто не стал кидать smile Линии рисуются ведь) Просто они стираются после сворачивания)
Вот полный код:
Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  //координаты забора
  zabor: array[1..35] of TPoint = (
    (x:  0; y:398),
    (x:  0; y:248),
    (x: 21; y:220),
    (x: 44; y:248),
    (x: 65; y:220),
    (x: 88; y:248),
    (x:109; y:220),
    (x:132; y:248),
    (x:153; y:220),
    (x:176; y:248),
    (x:197; y:220),
    (x:220; y:248),
    (x:241; y:220),
    (x:264; y:248),
    (x:285; y:220),
    (x:308; y:248),
    (x:329; y:220),
    (x:352; y:248),
    (x:373; y:220),
    (x:396; y:248),
    (x:417; y:220),
    (x:440; y:248),
    (x:461; y:220),
    (x:484; y:248),              
    (x:505; y:220),
    (x:528; y:248),
    (x:549; y:220),
    (x:572; y:248),
    (x:593; y:220),
    (x:616; y:248),
    (x:637; y:220),
    (x:660; y:248),
    (x:681; y:220),
    (x:704; y:248),
    (x:704; y:398)
  );
  i:integer;
  z:integer = 44;

procedure TForm1.FormPaint(Sender: TObject);
begin
with Canvas do
begin
  Brush.Color:=RGB(255,128,0);
  Polygon(zabor);

  for i:=1 to 40 do begin     //если в цикле, то линии сотрутся
  Stretch:=true;
  MoveTo(z, 248);
  LineTo(z, 398);
  z:=z+44;


  end;


  MoveTo(88, 248);            //это линия останется
  LineTo(88, 398);


end;
end;

end.

PM MAIL WWW ICQ   Вверх
baldina
Дата 12.12.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Чего у тебя есть? Сказано же - перед циклом. Нужно 44 - поставь 44.
После сворачивания (и вообще при любой перерисовке) у тебя z начинается не с 44 а с предыдущего последнего значения. И рисует, но уже за пределами формы.

Это сообщение отредактировал(а) baldina - 12.12.2007, 11:59
PM MAIL   Вверх
_Buch
Дата 12.12.2007, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



блин) сорри!)) Терь понятно! Спасибо smile

А по второму вопросу?)
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 12.12.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



_Buch, это особенность флудфила, он ведь заливает равномерно закрашенную поверхность, а если фон не успел очиститься до конца, то заливка не будет полной.

Добавлено через 2 минуты и 52 секунды
Если сделать так
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
  DoubleBuffered := True;
end;


То проблем не будет.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
_Buch
Дата 12.12.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Alexeis, сенкс!! smile
PM MAIL WWW ICQ   Вверх
ivan219
  Дата 12.12.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

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



Вот так будет крассивее:
Код

.
.
  z:integer;

procedure TForm1.FormPaint(Sender: TObject);
begin
 Z := 0;
.
.
  Stretch:=true;
  for i:=1 to 40 do
   begin     //если в цикле, то линии сотрутся
    Inc(Z, 44);
    MoveTo(z, 248);
    LineTo(z, 398);
  end;
.
.
end;
end;


Это сообщение отредактировал(а) ivan219 - 12.12.2007, 18:12
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

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

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

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

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


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

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


 




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


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

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