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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2011, 16:54   #1
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию не перерисовывается Canvas

сабж, собстно

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
  f:boolean;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
f:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
f:=false;
end;

procedure TForm1.FormPaint(Sender: TObject);
var
c:TColor;
begin
if f then
c:=clRed
else
c:=clBlack;

Form1.Canvas.Pen.Color:=c;
Form1.Canvas.MoveTo(100,100);
Form1.Canvas.LineTo(150,170);
end;

end.
вроде, если я нажимаю на 1 кнопку, то полоска должна становиться красной, а если жму на 2 кнопку, то чёрной. но полоска всегда чёрная. у меня д2010. минут 30 назад всё работало(не помню, что менял в коде). в чём может быть проблема?
FanRa3 вне форума Ответить с цитированием
Старый 13.07.2011, 17:39   #2
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

перед 'Pen-ом'
Код:
Form1.Canvas.Brush.Color := Form1.Color;

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 13.07.2011, 17:50   #3
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сообщение от volod3000 Посмотреть сообщение
перед 'Pen-ом'
Код:
Form1.Canvas.Brush.Color := Form1.Color;
не помогло
FanRa3 вне форума Ответить с цитированием
Старый 13.07.2011, 18:01   #4
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

Тогда так

Код:
f:= false;
Form1.Repaint;
Код:
f:= true;
Form1.Repaint;

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 13.07.2011, 18:11   #5
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сообщение от volod3000 Посмотреть сообщение
Тогда так

Код:
f:= false;
Form1.Repaint;
Код:
f:= true;
Form1.Repaint;
спасибо, работает, но раньше всё работало без репеинта. может надо поправить что-то другое?
FanRa3 вне форума Ответить с цитированием
Старый 13.07.2011, 18:16   #6
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

У, Вас есть код, выполняющий какое либо действие.
Вы, изменяете условия работы кода.
Следовательно необходимо это дать знать коду и
заставить его выполнится с новыми условиями.
А, дальше Вам карты в руки, и Ваше решение как Вы это сделаете.

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 13.07.2011, 18:23   #7
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

Цитата:
Сообщение от volod3000 Посмотреть сообщение
У, Вас есть код, выполняющий какое либо действие.
Вы, изменяете условия работы кода.
Следовательно необходимо это дать знать коду и
заставить его выполнится с новыми условиями.
А, дальше Вам карты в руки, и Ваше решение как Вы это сделаете.
а onPaint вроде выполняется всегда. отлавливал дебаггером, всё выполнялось, но почему-то не рисовалось
FanRa3 вне форума Ответить с цитированием
Старый 13.07.2011, 19:02   #8
volod3000
Форумчанин
 
Аватар для volod3000
 
Регистрация: 18.12.2008
Сообщений: 266
По умолчанию

OnPaint, OnResize Эти события вызываются каждый раз, когда форма изначально создаётся. При этом OnPaint вызывается каждый раз, когда какому-нибудь элементу формы необходимо перерисоваться (это событие можно использовать, если необходимо при этом рисовать на форме что-то особенное).

Мало открыть человеку глаза, большинство еще просит указать дорогу и ждет волшебного пенделя.
volod3000 вне форума Ответить с цитированием
Старый 13.07.2011, 19:37   #9
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Цитата:
а onPaint вроде выполняется всегда. отлавливал дебаггером, всё выполнялось, но почему-то не рисовалось
Во время выполнения дебагера форма уходила на задний план. это есть изменение состояния окна или его потомков, следовательно - репеинт.
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 13.07.2011, 22:02   #10
FanRa3
Пользователь
 
Регистрация: 04.11.2010
Сообщений: 92
По умолчанию

всем спасибо. сделал репеинт
FanRa3 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
canvas zloysadovod Мультимедиа в Delphi 0 19.05.2011 09:14
Не перерисовывается прямоугольник на Image artemavd Общие вопросы Delphi 3 22.09.2010 21:16
3D canvas konikovskit Мультимедиа в Delphi 1 06.09.2010 22:02
Canvas не перерисовывается после того, как зайдёт за границу экрана TwiX Мультимедиа в Delphi 10 05.03.2010 10:21
Одно создаваемое в DLL и используемое паралельно с консолью не перерисовывается lexluther Win Api 1 21.02.2007 20:28