Einzelnen Beitrag anzeigen

BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehlermeldung nach Installation einer neuen Komponente

  Alt 19. Mär 2009, 10:01
Hallo nochmal,

bin immer noch mit Problemen beschäftigt, die sich bei der Erstellung einer Komponente ergeben. Kurz für die, die sich die letzten beiden Beiträge nicht angeschaut haben. konstruiere mir gerade eine Composite Komponente. Habe sie auch fertig gestellt und per Package wurde sie in RAD installiert. Wenn ich mir die Komponente aber jetzt auf die Form ziehen möchte, tritt ein Fehler auf:

Zitat:
Zugriffsverletzung bei Adresse 0F6B1CE6 in Modul 'Package1.bpl'. Lesen von Adresse 00000000.
Hier mal der Quellcode für meine Komponente:
Delphi-Quellcode:
unit WinControl1;

interface

uses
  SysUtils, Classes, Controls, ComCtrls, Windows, StdCtrls, Graphics;

type
  TWinControl1 = class(TWinControl)
  private
    FLblContainerCaption, FLblTrackBar: TLabel;
    FEdPositionsEingabe: TEdit;
    FTrckBarTischposition: TTrackBar;
    FButtonEditEingabe: TButton;
    FCombBoxTischauswahl: TComboBox;
    fdTischposition: double;
    procedure SetContainerCaption(Value: string);
    procedure SetTischPosition(Value: double);
    function GetTischPosition: double;
    function CreatestaticLabel: TLabel;
    function CreatedynamicLAbel: TLabel;
    function CreateTrackBar: TTrackBar;
    function CreateEdit: TEdit;
    function CreateButton: TButton;
    function CreateComboBox: TComboBox;
    procedure Trackbarbewegung(Sender: TObject);
    procedure Position_ansteuern(Sender: TObject);
    procedure Edit_leeren(Sender: TObject);
  protected
    procedure CreateWnd; override;
  public
    constructor create(AOwner: TComponent);
    property ContainerCaption : string write SetContainerCaption;
    property Tischposition: double read GetTischPosition write SetTischposition;
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Samples', [TWinControl1]);
end;

constructor TWinControl1.create(AOwner: TComponent);
begin
  inherited create(AOwner);
  Controlstyle := Controlstyle - [csAcceptsControls]; // Der Componente wird nicht erlaubt
                                                      // andere Componenten aufzunehmen,
                                                      // als die, die durch den Programmierer
                                                      // hier einprogrammiert werden.
  Visible := true;
  width := 300;
  height := 200;

  // TestLabel initialisieren
  FLblContainerCaption := CreatestaticLabel;
  FTrckBarTischposition := CreateTrackBar;
  FLblTrackBar := CreatedynamicLabel;
  FEdPositionsEingabe := CreateEdit;
  FButtonEditEingabe := CreateButton;
  FCombBoxTischauswahl := CreateComboBox;
end;

function TWinControl1.CreatestaticLabel: TLabel;
begin
  result := TLabel.Create(Self);
  result.Parent := Self;
  result.Left := 18;
  result.Top := 10;
end;

function TWinControl1.CreatedynamicLabel: TLabel;
begin
  result := TLabel.Create(Self);
  result.Parent := Self;
  result.Left := 10 + round((320000/700000)*200);;
  result.Top := 85;
  result.Caption := '0,00 mm';
end;

function TWinControl1.CreateTrackBar: TTrackBar;
begin
  result := TTrackbar.Create(Self);
  result.Parent := Self;
  result.Left := 10;
  result.Top := 100;
  result.Height := 20;
  result.Width := 200;
  result.Max := 640000;
  result.Position := 320000;
  result.OnChange := TrackBarBewegung;
end;

function TWinControl1.CreateEdit: TEdit;
begin
  result := TEdit.Create(Self);
  result.Parent := Self;
  result.Left := 17;
  result.Top := 150;
  result.Height := 20;
  result.Width := 100;
  result.Text := 'Wert eingeben';
  result.OnEnter := Edit_leeren;
end;

function TWinControl1.CreateButton;
begin
  result := TButton.Create(Self);
  result.Parent := Self;
  result.Left := 130;
  result.Top := 145;
  result.Caption := 'Position ansteuern';
  result.Height := 30;
  result.Width := 120;
  result.OnClick := Position_ansteuern;
end;

function TWinControl1.CreateComboBox: TComboBox;
begin
  result := TComboBox.Create(Self);
  result.Left := 17;
  result.Top := 30;
  result.Height := 20;
  result.Width := 200;
end;

procedure TWinControl1.Trackbarbewegung(Sender: TObject);
begin
  fLblTrackBar.Left := 10 + round((FTrckBarTischposition.Position/700000)*200);
  fLblTrackBar.Caption := floattostr((FTrckBarTischposition.Position/6400)- 50) + ' mm';
  fdTischposition := FTrckBarTischposition.Position/6400;
end;

procedure TWinControl1.Edit_leeren(Sender: TObject);
begin
  fEdPositionsEingabe.Clear;
end;

// Procedure fehlerhaft, wenn Edit leer ist
procedure TWinControl1.Position_ansteuern(Sender: TObject);
begin
  try
    fdTischposition := strtofloat(FEdPositionsEingabe.Text)+50;
    FTrckBarTischposition.Position := round(fdTischposition*6400)
  except

  end;
end;

procedure TWinControl1.SetContainerCaption(Value: string);
begin
  FLblContainerCaption.Caption := Value;
end;

procedure TWinControl1.SetTischPosition(Value: Double);
begin
  fdTischposition := Value;
  FTrckBarTischposition.Position := round(fdTischposition*6400);
end;

function TWinControl1.GetTischPosition: double;
begin
  result := fdTischposition;
end;

procedure TWinControl1.CreateWnd;
begin
  inherited createWnd;
  FCombBoxTischauswahl.Parent := self;
  FCombBoxTischauswahl.Clear;
  FCombBoxTischauswahl.Items.Add('Verschiebetisch Referenzfaser');
  FCombBoxTischauswahl.Items.Add('Verschiebetisch Kamera/ Spleißgerät');
  FCombBoxTischauswahl.Items.Add('Piezoverschiebetisch');
  FCombBoxTischauswahl.ItemIndex := 0;
end;


end.
Beim Quellcode wird wie gesagt nichts beanstandet. Ich weiß, dass dieser auch noch nicht bis ins kleinste ausgereift ist, ich wollte erstmal alle Schritte mit diesem Beispiel durch gehen, damit ich Gewissheit habe, dass alles so läuft wie ich will.

Sieht jemand eventuell einen Fehler, der zu dem oben angegebenen Fehler führt?

Vielen Dank
BAMatze

Ps.: hier noch der Link zum vorletzten Beitrag (http://www.delphipraxis.net/internal...t.php?t=154378)
  Mit Zitat antworten Zitat