Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.06;
Скачать: CL | DM;

Вниз

Логарифмическая шкала   Найти похожие ветки 

 
Profi ©   (2005-02-13 21:06) [0]

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


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

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


 
Vaitek ©   (2005-02-13 21:39) [2]

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


 
Profi ©   (2005-02-13 23:38) [3]

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


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

ИМНО, TCustomControl.

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

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


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

Юрий Зотов ©   (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-14 01:03) [6]

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


 
Profi ©   (2005-02-14 01:16) [7]

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


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

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

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.


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

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

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


 
Profi ©   (2005-02-15 18:54) [10]

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

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


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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.11.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.049 c
1-1129551717
Bagdat
2005-10-17 16:21
2005.11.06
Маска в StringGrid


4-1126080735
Prov
2005-09-07 12:12
2005.11.06
Обработчик выбора пункта PopupMenu


14-1129572157
eagle_ua
2005-10-17 22:02
2005.11.06
Как создать объект в Delhpi?


2-1129042250
Dofin
2005-10-11 18:50
2005.11.06
Как в SQL запрос подставить значение Edit1.Text?


1-1129665369
Volf_555
2005-10-18 23:56
2005.11.06
Как вывести в TMemo содержимое определённой папки