Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Логарифмическая шкала


Profi ©   (2005-02-13 21:06:00) 

На каком базовом классе лучше всего создавать сабж. Пробовал на TImage, но столкнулся с проблемой цвета фона. Закрашивается только та область, размер которой совпадает с первым закрашиванием.


Юрий Зотов   (2005-02-16 02:26:00) [1]

> Profi ©   (15.02.05 18:54) [10]

TNotifyEvent тут ни при чем. См. описание AssignTo в справке и примеры в исходниках.


Profi   (2005-02-15 18:54:00) [2]

Юрий Зотов ©   (15.02.05 2:12) [9]
Я наверное что-то не так делаю. Сделал так:
в LogCharMat в Public добавил AssignTo: TnotifyEvent;

В SetYPoints пишу
If NewYPoints<>fYPoints then
fYPoints.AssignTo(NewYPoints);
UpdateLogChar;


Но UpdateLogChar все равно не вызывается!


Юрий Зотов   (2005-02-15 02:12:00) [3]

1. В TPoints добавить метод AssignTo (присвоение FMin, FMax и вызов OnChange).

2. В SetYPoints вызвать FYPoints.Assign(Value).


Profi   (2005-02-15 00:34:00) [4]

Столкнулся тут с проблемой, никак не могу решить!
Создал доп. модуль с классом

unit LogCharMat;

interface

Uses
 Classes, Messages, Controls;

Type
 TPoints=class(TPersistent)
 private
   fMin:Integer;
   fMax:Integer;
   Procedure SetMax(NewMax:Integer);
   Procedure SetMin(NewMin:Integer);
 Public
   OnChanged: TNotifyEvent;
   Constructor Create;
 published
   Property Min: Integer read fMin
     write SetMin default 10;
   Property Max: Integer read fMax
     write SetMax default 10000;
end;

implementation

Constructor TPoints.Create;
begin
 Inherited;
 fMin:=10;
 fMax:=10000;
end;

Procedure TPoints.SetMax(NewMax:Integer);
begin
 If NewMax=fMax then exit;
 fMax:=NewMax;
 if Assigned(OnChanged) then OnChanged(self);
end;

Procedure TPoints.SetMin(NewMin:Integer);
begin
 If NewMin=fMin then exit;
 fMin:=NewMin;
 if Assigned(OnChanged) then OnChanged(self);
end;

end.


В модуле самого компонента делаю так:

type
 TLogChar = class(TCustomControl)
 private
   { Private declarations }
...
 protected
   { Protected declarations }
   fXPoints:TPoints;
   fYPoints:TPoints;
   Procedure SetXpoints(NewXPoints:TPoints);
   Procedure SetYpoints(NewYPoints:TPoints);
   Procedure UpdateLogChar;
 public
   { Public declarations }
   Constructor Create(aOwner:TComponent); override;
   Destructor Destroy; override;
   published
   { Published declarations }
   Property XPoints: TPoints read fXPoints
     write SetXpoints;
   Property YPoints: TPoints read fYPoints
     write SetYPoints;
 end;


Но почему-то в SetXPoints и SetYPoints ничего не отлавливается. А очень надо! Помогите, pls.


Profi   (2005-02-14 01:16:00) [5]

Юрий Зотов ©   (14.02.05 1:03) [6]
Ок, спасибо!


Юрий Зотов   (2005-02-14 01:03:00) [6]

При выполнении конструктора окно еще не создано и хэндла у канвы еще нет - значит, рисовать еще не на чем. Рисуйте в Paint.


Profi   (2005-02-14 00:53:00) [7]

Юрий Зотов ©   (13.02.05 23:56) [4]
Да TCustomControl подошел, но вот не пойму в чем ошибка:

Constructor.Create(aOwner:TComponent);
begin
Inherited;
fBackColor:=clWhite;
UpdateLogChar;
end;

Procedure TLogChar.UpdateLogChar;
begin
Canvas.Brush.Color:=fBackColor;
Canvas.FillRect(Rect(0,0,Width,Height));
end;


Вызывает ошибку Controls '' is not parent window


Юрий Зотов   (2005-02-13 23:56:00) [8]

ИМНО, TCustomControl.

Для отрисовки - перекрыть Paint.

Параметры осей и данные - реализовать в виде свойств с методами Set, в которых вызывается Invalidate. Ввод данных в design-time удобно сделать через диалоговый редактор свойства.


Profi   (2005-02-13 23:38:00) [9]

Юрий Зотов ©   (13.02.05 21:32) [1]
Прямоугольное поле, задается цвет фона, цвет осей, цвет линии графика, максимум и минимум по осям, ну и вводятся сами данные. Производится расчет, строится сетка, рисуется график.


Vaitek   (2005-02-13 21:39:00) [10]

Я обычно рисую на TPaintBox, но там надо не забывать отлавливать onPaint событие.


Юрий Зотов   (2005-02-13 21:32:00) [11]

Вполне возможно, TCustomControl.
Надо бы дать описание компонента, тогда можно будет уточнить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо