AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Event für Fehlercode-Übergabe

Ein Thema von BAMatze · begonnen am 20. Feb 2009 · letzter Beitrag vom 23. Feb 2009
Antwort Antwort
Seite 2 von 2     12
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 20. Feb 2009, 11:41
f...

Danke
  Mit Zitat antworten Zitat
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 20. Feb 2009, 11:49
Also hab den *hust Fehler beseitigt und es läuft auch ohne Probleme, allerdings die Threadmsg 16 wird noch nicht ausgegeben. Sieht jemand dafür vieleicht noch einen Grund?
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#13

Re: Event für Fehlercode-Übergabe

  Alt 20. Feb 2009, 11:51
Einkommentiert haste die Sachen aber wieder?

Ach ja und das Event im Konstruktor auszulösen ist eher ne doofe Idee, wenn du es nach dem Erzeugen des Objekts erst zuweist
  Mit Zitat antworten Zitat
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 20. Feb 2009, 12:12
ok alles funzt

Danke euch
  Mit Zitat antworten Zitat
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 23. Feb 2009, 10:37
Hallo an alle muss nochmal diesen Threat aufnehmen, weil ich jetzt verwirrt anscheinend bin. Letzten Freitag hat das von mir implizierte Event anscheinend tadellos funktioniert und heute scheint es sich gegen mich verschworen zu haben. Ich stelle hier nochmal die beiden wichtigen Units zur Verfügung, vieleicht sieht jemand, einen Fehler. Hab leider nach fast 1,5h immer noch keinen Anhaltspunkt.

TischUnit:
Delphi-Quellcode:
unit VT_Funktionen;

interface

uses
  Windows, SysUtils, Hilfsfunktionen, ExtCtrls, Dialogs;

// Eventdeklaration
type TFehlerevent = procedure(const iFehlercode: integer) of object;

// TV_Tische-Klassendeklaration
type TV_Tische = class
  Fehlerevent: TFehlerevent;
  private
    // Deklaration aller verwendeten Variablen die nur intern in dieser Unit
    // verwendet werden können
    //Tischbmp: TBitmap;
    TischDLL: TDLL_Datei;
    DLL_Handle: THandle;
    //bBewegung, bkalibriert,bAngeschlossen: boolean;
    //iaktuelleTischposition, iZielTischposition: integer;
    iComport, iKanal: integer;
    Bewegungsueberwachung: TTimer;
    // Deklaration aller für die Initialisierung verwendeten und nur in dieser Unit
    // verwendeten Funktionen
    function DLLHandle_zuweisen: boolean;
    function DLLFunktionen_laden: boolean;
    function ComPort_ermitteln: boolean;
    function Verfuegbarkeit: boolean;
    // Deklaration aller für die Bewegung verwendeten und nur in dieser Unit
    // verwendeten Funktionen
    function Geschwindigkeit_festlegen(const iGeschwindigkeit: integer): boolean;
    function Beschleunigung_festlegen(const iBeschleunigung: integer): boolean;
    function Bremsen: boolean;
    // Deklaration aller für die Überprüfung des Tischstatus und nur in dieser Unit
    // verwendeten Funktionen
    function Bewegtsich(const Kanal: integer): boolean;
    procedure BewegungsueberwachungTimer(Sender: TObject);
    procedure Fehlermeldung(const iFehler: integer);
  public
    // Deklaration aller für die Initialisierung verwendeten und auch in anderen Units
    // zur Verfügungstehenden Funktionen
    constructor create;
    function Initialising: boolean;
    destructor Destroy; override;
    //function init(const iKanal: integer): boolean;
    // Deklaration aller für die Bewegung verwendeten und auch in anderen Units
    // zur Verfügungstehenden Funktionen
    //function Kalibrierung(const Kanal: integer): boolean;
    function BewegenABS(dneuPos: double): boolean; overload;
    function BewegenABS(const KaliPos: string): boolean; overload;
    function BewegenABS(dneuPos: double; iGeschwindigkeit: integer): boolean; overload;
    function BewegenABS(dneuPos: double; iGeschwindigkeit, iBeschleunigung: integer):boolean; overload;
    // Deklaration aller verwendeten Variablen die auch in anderen Units
    // zur Verfügungstehenden Funktionen
    property Handle: THandle read DLL_Handle;
    property Verfuebar: boolean read Verfuegbarkeit;
    property Fehlerevent_ausloesen: TFehlerevent read Fehlerevent write Fehlerevent;
    property Kanal: integer read iKanal write iKanal;
end;

// Typdeklaration für die aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen.
type TMMC_COM_open = function(portnumber,bautrate: integer):integer; stdcall;
type TMMC_close = function: integer; stdcall;
type TMMC_sendCommand = function(pCmd: pChar): integer; stdcall;
type TMST_moving = function: integer; stdcall;
type TMMC_setDevice = function(NewAxis: integer): integer; stdcall;

// Variablendeklaration der aus der dynamisch eingebundenen MMC.DLL zu ladenen
// Funktionen
var MMC_COM_open: TMMC_COM_open;
    MMC_close: TMMC_close;
    MMC_sendCommand: TMMC_sendCommand;
    MST_moving: TMST_moving;
    MMC_setDevice: TMMC_setDevice;

implementation
{////////////////////////////////////////////////////////////////////////////////////}
{/          Funktionen für Komunikationsaufbau bzw. -terminierung und               /}
{/                            und Statusüberprüfung                                 /}
{////////////////////////////////////////////////////////////////////////////////////}

constructor TV_Tische.create;
begin
  inherited create;
  // Der Überwachungstimer wird initialisiert und aktiviert. Dieser überwacht rein
  // ob sich der Tisch bewegt oder steht. Wenn der Tisch sich bewegt soll später
  // die Beschleunigung und die Geschwindigkeit berechnet werden.
  Fehlermeldung(100);
  Bewegungsueberwachung := TTimer.Create(nil);
  Bewegungsueberwachung.OnTimer := BewegungsueberwachungTimer;
  Bewegungsueberwachung.Enabled := true;
end;

... etliche Proceduren und Funktionen aus der Tisch-Klasse

procedure TV_Tische.Fehlermeldung(const iFehler: Integer);
begin
  // Diese Fehlermeldung funktioniert allerdings scheint er nicht durch die
  // if-Anweisung zu gehen, warum?

  if assigned(Fehlerevent) then Fehlerevent(iFehler); <--- hier vermute ich einen Fehler, weil ab hier die Fehlermeldung verschwindet
end;

end.
ThreadUnit
Delphi-Quellcode:
unit ThreadUnit;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, ComCtrls, VT_Funktionen, Hilfsfunktionen, FehlerUnit;

// Eventdeklaration
type TFehleruebergabe = procedure(const iFehlercode: integer) of object;

type TAnschlussElement = record
  Komponentenhandle: THandle;
  sIdent: string;
  iComSchnittstelle: integer;
  bAngeschlossen, bDLL: boolean;
end;

type
  THUnterthread = class(TThread)
    Fehleruebergabe: TFehleruebergabe;
    private
      
    protected
      procedure Execute; override;
    public
      iThreadmsg: integer;
      AnschlussElement: array of TAnschlussElement;
      constructor create;
      destructor Destroy; override;
      procedure Fehler_verifizieren(const iFehlercode: integer);
      property Fehleruebergeben: TFehleruebergabe read Fehleruebergabe write Fehleruebergabe;
    end;

var V_Tische: TV_Tische;

implementation

uses LoaderUnit;

constructor THUnterthread.create;
begin
  inherited create(false);
  iThreadmsg := 1;
end;

procedure THUnterthread.Execute;
begin
  V_Tische := TV_Tische.create;
  V_Tische.Fehlerevent_ausloesen := Fehler_verifizieren; <-- Hier könnte alternativ ein Fehler vorliegen
end;

destructor THUnterthread.Destroy;
begin
  try
    V_Tische.Free
  except

  end;
  inherited Destroy;
end;

procedure THUnterthread.Fehler_verifizieren(const iFehlercode: integer);
begin
  // in diese Fehlermeldung wird nicht reingegangen!!!
  Fehleruebergabe(iFehlercode);
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#16

Re: Event für Fehlercode-Übergabe

  Alt 23. Feb 2009, 11:07
Wann erwartest du denn den Fehler.
Im Constrcutor ist das Event noch nicht zugewisen (also Fehlermeldung(100) wird vor der Eventzuweisung aufgerufen)

Außerdem wird dann Thread gleich nach Execute beendet.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 23. Feb 2009, 11:13
Naja eigentlich ist das ja nur der Anfang für mehrere Initalisierungen von Geräten. Fehler sind eigentlich wärend der gesamten Initialisierung und auch später bei der Benutzung der Geräte möglich. Diese will ich dann so weit möglich verifizieren. Habe aber erstmal die erste Fehlermeldung beim Create raus genommen. Vieleicht hilft es einfach, wenn ich dir mal das ganze Projekt hier zur Verfügung stelle.
Angehängte Dateien
Dateityp: zip tischsteuerung_version_2_872.zip (379,9 KB, 1x aufgerufen)
  Mit Zitat antworten Zitat
BAMatze

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

Re: Event für Fehlercode-Übergabe

  Alt 23. Feb 2009, 11:37
Also hab jetzt nochmal einiges geändert, waren doch noch einiges zu verbessern drin, aber anscheinend hat es jetzt wieder seine Funktionalität bekommen.Was mich nur noch irritiert, vieleicht kennt ihr das Phänomen, seit ich den Fehler beseitigt hab, fehlt das Rückgabe Fenster beim Compilieren. Hier zum Test nochmal die korrigierte Version:
Angehängte Dateien
Dateityp: zip tischsteuerung_version_2_191.zip (390,6 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:22 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