Форум: "Компоненты";
Текущий архив: 2005.11.06;
Скачать: [xml.tar.bz2];
ВнизЛогарифмическая шкала Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.037 c