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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заливка Канвы при запуске программы, Не удается залить канву 
:(
    Опции темы
NosfBlazE
Дата 12.3.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


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

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



Есть простенькая программка, которая представляет собой Форму, на которую кинут PaintBox.
Пытаюсь при запуске программы сразу же залить PaintBox и что-нибдуь на нем нарисовать.

Код

procedure TMainForm.FormShow(Sender: TObject);
begin

        MainForm.PaintBox1.Canvas.Brush.Color:=clWhite;
        MainForm.PaintBox1.Canvas.Pen.Color := clBlack;
        MainForm.PaintBox1.Canvas.FillRect(clientrect);
        MainForm.PaintBox1.Canvas.Ellipse(38,58,42,62);

end;


Т.е. все просто: на событие onShow главной Формы цепляю все это, но, увы, ничего не происходит. smile
Если же кинуть на форму еще какую-то кнопку и повесить все это на ее клик, то работает как надо. Но я хочу работать с канвой без вмешательства пользователя.))

В чем может быть проблема, может быть, можно как-то по-другому сделать то, что я хочу? В общем, жду совета, а то сам я еще неочень разбираюсь в Делфи.
PM MAIL ICQ Skype Jabber   Вверх
Frees
Дата 12.3.2010, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



повесь это на OnPaint формы..


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
NosfBlazE
Дата 12.3.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


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

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



С onPaint работает, не спорю smile Просто потом из-за этого события после каких-то изменений с формой/на форме, снова срабатывает onPaint, который затирает все, что было на канве.

Вот если бы можно было заставить онПеинт сработать только 1 раз при старте программы... Тут я пытался поставить булевский флаг, который в онПеинте после работы с канвой менял, но тогда все возвращалось к тому, с чего начиналось: канва при старте проги оставалась неизменной.
PM MAIL ICQ Skype Jabber   Вверх
Frees
Дата 12.3.2010, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



все рисование должно быть в он паинте... что у тебя затирается не пойму, объясни...


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
NosfBlazE
Дата 12.3.2010, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


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

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



Тогда рассказываю более подобно. Пасиб, что хоть слушаете smile

В программе есть ПеинтБокс и кнопки, с помощью которых происходит рисование на этом ПеинтБоксе.
Однако, в процессе работы программы некоторые кнопки делаются активными/неактивными. В этот то момент и срабатывает событие онПеинт главной формы, которое выводит начальную заливку и рисунок нашего ПеинтБокса, что были установлены при запуске программы. И все результаты последующей работы с ПеинтБоксом  затираются.
PM MAIL ICQ Skype Jabber   Вверх
Frees
Дата 12.3.2010, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



рисуй в Tbitmap а в событии OnPain у PaintBox1 рисуй содержимое  bitmap на канве PaintBox1

Добавлено через 13 минут и 39 секунд
пример

Код

  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure PaintBox1Paint(Sender: TObject);
  private
    b: TBitmap;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  b.Canvas.Ellipse(0,0,42,62);
  PaintBox1.Repaint;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  b := TBitmap.Create;
  with b do
  begin
     SetSize(Self.Width, self.Height);
     Canvas.Brush.Color:=clWhite;
     Canvas.Pen.Color := clBlack;
     Canvas.FillRect(clientrect);
     Canvas.Ellipse(38,58,42,62);
  end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  b.Free;
end;

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Draw(0,0, b);
end;

end.


Это сообщение отредактировал(а) Frees - 12.3.2010, 21:25


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
NosfBlazE
Дата 12.3.2010, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


炎丸 =Ferro ignique!=
*


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

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



Ясно, спасибо большое. Пойду тогда все переделывать smile
PM MAIL ICQ Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

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

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

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


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

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


 




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


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

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