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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перерисовка компонента??? 
:(
    Опции темы
FShadow
Дата 11.4.2008, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 8.12.2006
Где: Беларусь, г. Минс к

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



Народ помогите. Вопрос простой. но тем не менее.  Есть к примеру такой компонент.
Код

type
  TMyComp = class (TGraphicControl)
  protected
    FBorderWidth: integer;
    procedure SetBorderWidth(const Value: integer);
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property BorderWidth: integer
        read FBorderWidth
        write SetBorderWidth default 1;
  end;

implementation

{ TMyComp }

constructor TMyComp .Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ControlStyle := ControlStyle + [csOpaque];
  FBorderWidth := 1;
  Width := 100;
  Height := 100;
end;

procedure TMyComp .Paint;
var
  DrawRct: TRect;
begin
  DrawRct := ClientRect;
  Canvas.Pen.Width := FBorderWidth;
  Canvas.Rectangle(Left, Top, Width, Height);
end;

procedure TMyComp .SetBorderWidth(const Value: integer);
begin
  if Value <> FBorderWidth then
    FBorderWidth := Value;
  Invalidate;
end;
end.

При вызове его в осн программе и изменении его свойства BorderWidth по нажатию кнопки должна меняться толщина границы но ничего не происходит. В чем дело?
Код

procedure TForm1.Button2Click(Sender: TObject);
var
  fValue: integer;
begin
  inc(fValue);
  Chart.BorderWidth := fValue;
end;



PM MAIL   Вверх
MetalFan
Дата 11.4.2008, 20:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



неинициализированные локальные переменные - зло!


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


Новичок



Профиль
Группа: Участник
Сообщений: 34
Регистрация: 8.12.2006
Где: Беларусь, г. Минс к

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



Цитата

неинициализированные локальные переменные - зло! 

можно по конкретнее??
Может я не корректно здесь fValue описал будем считать что я объявил ее глобально.
Все равно если я даже напишу по нажатию кнопки ничего не меняется
Код

  Chart.BorderWidth := 20;


Это сообщение отредактировал(а) FShadow - 11.4.2008, 20:56
PM MAIL   Вверх
Kaboom
Дата 11.4.2008, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

procedure TForm1.Button2Click(Sender: TObject);
var
  fValue: integer;
begin
  inc(fValue);
  Chart.BorderWidth := fValue;
end;


Как ты думаешь, чему равно fValue? А если до этого прибавить единицу, что выйдет?
PM MAIL   Вверх
ivan219
Дата 12.4.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Создавал динамически? а про парент забыл smile My.Parent := Self;
Код

unit Unit1;

interface

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

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

type
  TMyComp = class (TGraphicControl)
  protected
    FBorderWidth: integer;
    procedure SetBorderWidth(const Value: integer);
    procedure Paint; override;
  public
    constructor Create(AOwner: TComponent); override;
  published
    property BorderWidth: integer read FBorderWidth write SetBorderWidth default 1;
  end;

var
  Form1: TForm1;
  My: TMyComp;
  A: Integer;

implementation

{$R *.dfm}
{ TMyComp }

constructor TMyComp .Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FBorderWidth := 1;
  Width := 100;
  Height := 100;
end;

procedure TMyComp .Paint;
var
  DrawRct: TRect;
begin
  DrawRct := ClientRect;
  Canvas.Pen.Color := clBlack;
  Canvas.Pen.Width := FBorderWidth;
  Canvas.Brush.Color := clWhite;
  Canvas.Rectangle(Left, Top, Width, Height);
end;

procedure TMyComp .SetBorderWidth(const Value: integer);
begin
  if Value <> FBorderWidth then
    FBorderWidth := Value;
  Invalidate;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Inc(A);
 My.BorderWidth := A;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 My := TMyComp.Create(Self);
 My.Parent := Self;
 My.Left := 0;
 My.Top := 0;
 My.Width := 100;
 My.Height := 100;
end;

end.

 smile 
PM MAIL ICQ   Вверх
Poseidon
Дата 14.4.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(Kaboom @  11.4.2008,  22:56 Найти цитируемый пост)
Как ты думаешь, чему равно fValue?
По дефолту целочисленные переменные равны нулю. Так что все там нормально, хоть и не рекомендуется так делать smile



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
MetalFan
Дата 14.4.2008, 10:54 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Poseidon @  14.4.2008,  09:12 Найти цитируемый пост)
По дефолту целочисленные переменные равны нулю. Так что все там нормально, хоть и не рекомендуется так делать smile

Локальные переменные не инициализируются нулями. они могут иметь совершенное непредсказуемое значение.
не путай с полями класса.


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


Шустрый
*


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

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



Код

По дефолту целочисленные переменные равны нулю.


Я тоже так думал, пока не пришлось искать ошибку smile 
PM MAIL   Вверх
Alexeis
Дата 15.4.2008, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



  Стековые переменные не инициализируются, компилятор вставляет код, который сдвигает указатель стека на нужный размер и эта память становиться памятью переменных. Правда сейчас для новых рекордов еще должен вызываться конструктор.


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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