![]() |
Problem bei Benutzung eigener Komponente
hi,
ich hab mir heute eine Komponente geschrieben (erbt von TComponent). die hab ich auch compiliert und installiert und sie erscheint in der Komponentenleiste. Mein Problem ist, wenn ich sie auf ne Form ziehen will, kommt folgender Fehler: "Access violation at adresse 51001A78 in module 'dclusr70.bpl' Read of adress 00000000." Das heißt ja, das er es nicht finden, kann, aber wie kann es dazu kommen, installiert ist es ja, liegt auch im richtigen Ordner. Habt ihr ne idee? Vielen Dank im Vorraus Ist schon nen gutes Jahr her seit dem ich das letzte Mal Komponenten geschrieben habe, hatte bisher keine Probleme Warscheinlich irgend ne gleichigkeit, die ich übesehen habe? gruss Olav |
Re: Problem bei Benutzung eigener Komponente
Benutzt du eine Subklasse, welche du nicht instantiierst?
|
Re: Problem bei Benutzung eigener Komponente
Zitat:
|
Re: Problem bei Benutzung eigener Komponente
So, hatte eben ein bisschen Zeit und hab noch mal den Code druchgeguckt.
innerhalb der Komponente brauche ich einen Timer, wenn ich diesen inclusive dekleration herausnehme, funktoniert es ohne Fehlermeldung, wenn ich ihn wieder reinnehme klappt es nicth mehr. Vor längere Zeit hab ich mal ne andre Komponente (ne Graphische Binäre Uhr von TGraghicControl) gemacht und dort auch einen Timer benutzt, da hat es funktioniert, ich habs mal verglichen, aber keinen elementaren unterschied gefunden. Anbei der Code meiner Komponente, könnt ihr da nen Fehler finden? vielen DAnk im Vorraus gruss Olav
Delphi-Quellcode:
unit DriveControl;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Math,StdCtrls, ExtCtrls; type TDriveControl = class(TGraphicControl) private { Private declarations } FForm : TForm; //Plattformground FGeschwindigkeit : integer; //Geschwindigkeitswert FLenkung : integer; //Lenkwert FMaxGE: integer; //Maximale Geschwindigkeit FMaxLE: integer; //Maximaler Lenkeinschlag Timer1: TTimer; l,k,p,o: integer; procedure SetForm(Form: TForm); procedure SetGE(Wert: Integer); procedure SetLE(Wert: Integer); procedure SetMGE(Wert: Integer); procedure SetMLE(Wert: Integer); function GetForm: TForm; function GetGE: Integer; function GetLE: Integer; function GetMGE: Integer; function GetMLE: Integer; procedure Timer1Timer(Sender: TObject); protected { Protected declarations } public { Public declarations } constructor create(AOwner: TComponent); Override; { procedure KeyDown(Key: Word); procedure KeyUp(Key: Word); } published { Published declarations } property Form : TForm Read GetForm Write SetForm; property Geschwindigkeit : Integer Read GetGE Write SetGE; property Lenkung : Integer Read GetLE Write SetLE; property MaxGE : Integer Read GetMGE Write SetMGE; property MaxLE : Integer Read GetMLE Write SetMLE; end; procedure Register; implementation procedure TDriveControl.Timer1Timer(Sender: TObject); begin k := 0; if (FGeschwindigkeit < FMaxGE) then begin inc(FGeschwindigkeit); end; end; constructor TDriveControl.create(AOwner: TComponent); begin inherited; Timer1.Create(self); Timer1.Interval := 500; Timer1.Enabled := False; l := 0; k := 0; p := 0; o := 0; end; { procedure TDriveControl.KeyDown(Key : Word); begin If (Key = VK_UP) then begin Timer2.Enabled := False; Timer3.Enabled := False; if (l = 0) then begin Timer1.Enabled := True; end; end; end; procedure TDriveControl.KeyUp(Key : Word); begin If (Key = VK_UP) then begin Timer1.Enabled := False; if (l = 1) then l := 0 else l := 1; Timer2.Enabled := True; Timer3.Enabled := True; end; end; } procedure TDriveControl.SetForm(Form: TForm); begin FForm := Form; end; procedure TDriveControl.SetGE(Wert: Integer); begin FGeschwindigkeit := Wert; end; procedure TDriveControl.SetLE(Wert: Integer); begin FLenkung := Wert; end; procedure TDriveControl.SetMGE(Wert: Integer); begin FMaxGE := Wert; end; procedure TDriveControl.SetMLE(Wert: Integer); begin FMaxLE := Wert; end; function TDriveControl.GetForm: TForm; begin result := FForm; end; function TDriveControl.GetGE: Integer; begin result := FGeschwindigkeit; end; function TDriveControl.GetLE: Integer; begin result := FLenkung; end; function TDriveControl.GetMGE: Integer; begin result := FMaxGE; end; function TDriveControl.GetMLE: Integer; begin result := FMaxLE end; procedure Register; begin RegisterComponents('Standard', [TDriveControl]); end; end. |
Re: Problem bei Benutzung eigener Komponente
Herzlich willkommen in der Delphi-PRAXiS, Olav!
Die Ursache für die Fehlermeldung liegt im Konstruktor deiner Komponente. Die Instanziierung des Timers muss so aussehen:
Delphi-Quellcode:
Du weißt, dass du den Event-Handler für den Timer noch nicht zugewiesen hast?
// Timer1.Create(self);
Timer1 := TTimer.Create(self); Gruß Hawkeye |
Re: Problem bei Benutzung eigener Komponente
hi, danke schonmal.
wie weise ich den Event-Handler zu? gruss Olav |
Re: Problem bei Benutzung eigener Komponente
Das ist ganz einfach:
Delphi-Quellcode:
Gruß Hawkeye
Timer1.OnTimer := Timer1Timer;
|
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz