AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei Benutzung eigener Komponente

Ein Thema von ol_le · begonnen am 3. Okt 2008 · letzter Beitrag vom 4. Okt 2008
Antwort Antwort
ol_le

Registriert seit: 24. Jun 2008
4 Beiträge
 
#1

Problem bei Benutzung eigener Komponente

  Alt 3. Okt 2008, 22:07
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem bei Benutzung eigener Komponente

  Alt 3. Okt 2008, 22:13
Benutzt du eine Subklasse, welche du nicht instantiierst?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#3

Re: Problem bei Benutzung eigener Komponente

  Alt 3. Okt 2008, 22:29
Zitat von ol_le:
hiDas heißt ja, das er es nicht finden, kann, aber wie kann es dazu kommen, installiert ist es ja, liegt auch im richtigen Ordner.
Nö. Das heißt, das irgendwas im Package (in dem Fall deine Komponente) auf etwas zugreift, was noch nicht initialisiert wurde (Klassen, Arrays, etc).
  Mit Zitat antworten Zitat
ol_le

Registriert seit: 24. Jun 2008
4 Beiträge
 
#4

Re: Problem bei Benutzung eigener Komponente

  Alt 4. Okt 2008, 19:20
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.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Problem bei Benutzung eigener Komponente

  Alt 4. Okt 2008, 20:02
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:
// Timer1.Create(self);
  Timer1 := TTimer.Create(self);
Du weißt, dass du den Event-Handler für den Timer noch nicht zugewiesen hast?

Gruß Hawkeye
  Mit Zitat antworten Zitat
ol_le

Registriert seit: 24. Jun 2008
4 Beiträge
 
#6

Re: Problem bei Benutzung eigener Komponente

  Alt 4. Okt 2008, 21:29
hi, danke schonmal.

wie weise ich den Event-Handler zu?

gruss Olav
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Problem bei Benutzung eigener Komponente

  Alt 4. Okt 2008, 21:47
Das ist ganz einfach:

Timer1.OnTimer := Timer1Timer; Gruß Hawkeye
  Mit Zitat antworten Zitat
4. Okt 2008, 22:05
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz