Zitat von
ibp:
bei mir meckert er aber, dass canvas nicht bekannt ist!
Ich habe nun die Komponente bei mir in Delphi 7 Architect installiert und sie läuft ohne Warnung etc durch und funktioniert. Ich habe dabei noch festgestellt, dass sie so nicht auf Änderungen bei Pen und Brush reagiert und das noch schnell erweitert. Da ich es nun sogar mit einem richtigen Delphi Compiler getestet habe und nicht nur mit meinen (schlechten) Augen, kann ich nun sagen: Die Komponente läuft unter Delphi 7 ohne Probleme.
Delphi-Quellcode:
unit FormLine;
interface
uses
SysUtils, Classes, Controls, Windows, Graphics;
type
TFormLine =
class(TGraphicControl)
private
FStartPosX : Integer;
FStartPosY : Integer;
FEndPosX : Integer;
FEndPosY : Integer;
procedure SetStartPosX(
const Value: Integer);
procedure SetStartPosY(
const Value: Integer);
procedure SetEndPosX(
const Value: Integer);
procedure SetEndPosY(
const Value: Integer);
procedure SetPen(
const Value: TPen);
function GetPen: TPen;
procedure SetBrush(
const Value: TBrush);
Function GetBrush: TBrush;
Procedure ValueChanged(Sender: TObject);
protected
{ Protected-Deklarationen }
public
{ Public-Deklarationen }
Constructor Create(AOwner: TComponent);
Override;
Procedure Paint;
Override;
published
{ Published-Deklarationen }
property StartPosX: Integer
read FStartPosX
write SetStartPosX;
property StartPosY: Integer
read FStartPosY
write SetStartPosY;
property EndPosX : Integer
read FEndPosX
write SetEndPosX;
property EndPosY : Integer
read FEndPosY
write SetEndPosY;
property Pen: TPen
read GetPen
write SetPen;
property Brush: TBrush
read GetBrush
write SetBrush;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
Beispiele', [TFormLine]);
end;
procedure TFormLine.SetStartPosX(
const Value: Integer);
begin
IF (Value <> FStartPosX)
THEN BEGIN
FStartPosX := Value;
Invalidate;
END;
end;
procedure TFormLine.SetStartPosY(
const Value: Integer);
begin
IF (Value <> FStartPosY)
THEN BEGIN
FStartPosY := Value;
Invalidate;
END;
end;
procedure TFormLine.SetEndPosX(
const Value: Integer);
begin
IF (Value <> FEndPosX)
THEN BEGIN
FEndPosX := Value;
Invalidate;
END;
end;
procedure TFormLine.SetEndPosY(
const Value: Integer);
begin
IF (Value <> FEndPosY)
THEN BEGIN
FEndPosY := Value;
Invalidate;
END;
end;
procedure TFormLine.SetPen(
const Value: TPen);
Begin
Canvas.Pen.Assign(Value);
End;
Function TFormLine.GetPen: TPen;
Begin
Result := Canvas.Pen;
End;
procedure TFormLine.SetBrush(
const Value: TBrush);
Begin
Canvas.Brush.Assign(Value);
End;
Function TFormLine.GetBrush: TBrush;
Begin
Result := Canvas.Brush;
End;
procedure TFormLine.Paint;
begin
Canvas.FillRect(Canvas.ClipRect);
Canvas.MoveTo(FStartPosX, FStartPosY);
Canvas.LineTo(FEndPosX, FEndPosY);
end;
Constructor TFormLine.Create(AOwner: TComponent);
Begin
inherited;
Canvas.Pen.OnChange := ValueChanged;
Canvas.Brush.OnChange := ValueChanged;
End;
Procedure TFormLine.ValueChanged(Sender: TObject);
Begin
If (
Not ( csLoading
In ComponentState ) )
Then
Invalidate;
End;
end.
/EDIT: Was mich aber noch viel mehr wundert ist, dass du hier in Beitrag #16 schreibst, dass dich das Rechteck stört, somit muss die Komponente doch schon bei dir gelaufen sein. Somit frage ich mich, was du seit dem verändert hast? Schliesslich wurde das Canvas zuvor auch genutzt und war damals aber anscheinend noch bekannt...