Einzelnen Beitrag anzeigen

BAMatze

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

senden eines Strings per SendMessage

  Alt 9. Mär 2009, 15:14
Hallo wiedermal,

Also ich möchte aus einer Unit, welche meine Fehlerbehandlung beinhaltet einen String an meine LoaderUnit senden. Hab auch eine eigentlich sehr schöne Variante von Luckie gefunden hier, die ich auch so einbinden konnte, dass das Programm ohne Probleme funktioniert. Leider kommt der String aber anscheinend nicht wirklich an. Wo der Fehler liegt, kann ich derzeit noch nicht sagen, weil, wie gesagt, das Programm funktionstüchtig ist. hier mal die wichtigen Stellen in den beiden Units:


die FehlerUnit
Delphi-Quellcode:
type TDatenaustausch = record
  dwData, cdData: integer;
  lpData: string;
end;

...

function TFehler.AusFehlercode_Fehlermeldung_auslesen: string;
var Datenaustausch: TDatenaustausch;
    Handle: THandle;
begin
  try
    case iFehlercode of
    /////////////////////////////////////////////////////////////////////////////////////
    // Systemnachrichten //
    /////////////////////////////////////////////////////////////////////////////////////
    0 : result := 'Initialisierung abgeschlossen.';

    /////////////////////////////////////////////////////////////////////////////////////
    // Verschiebetisch-Fehler //
    /////////////////////////////////////////////////////////////////////////////////////
    100 : result := 'Kommunikation mit Verschiebetisch wird aufgebaut';
    101 : result := 'Die DLL der Verschiebetische ("MMC.DLL") konnte nicht gefunden werden.';
    102 : result := 'Es ist ein Fehler beim Zugriff auf die Verschiebetisch-DLL aufgetreten.';
    103 : result := 'Es konnte kein DLL-Handle für die Verschiebetisch-DLL gefunden werden.';
    104 : result := 'Es ist ein Fehler beim Laden der Funktionen aus der Verschiebetisch-DLL aufgetreten.';
    105 : result := 'Es konnte keine Kommunikationschnittstelle für die Verschiebetische gefunden werden.';
    106 : result := 'Es ist ein Fehler beim Verbindungsaufbau mit den Verschiebetischen aufgetreten.';
    107 : result := 'Verschiebetische sind nicht Verfügbar.';
    108 : result := 'Bei der Verfügbarkeitsprüfung für die Verschiebetische sind Fehler gefunden worden.';
    109 : result := 'Verschiebetische konnten nicht intialisiert werden.';
    110 : result := 'Bei der Initialisierung der Verschiebetische ist ein Fehler aufgetaucht.';
    // Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
    // und auch die Protokollierung erfolgt.

    /////////////////////////////////////////////////////////////////////////////////////
    // Piezo-Verschiebetisch-Fehler //
    /////////////////////////////////////////////////////////////////////////////////////
    200 : result := 'Kommunikation mit Piezoverschiebetisch wird aufgebaut';
    201 : result := 'Die DLL des Piezotisch ("E816_DLL.dll") konnte nicht gefunden werden.';
    202 : result := 'Es ist ein Fehler beim Zugriff auf die Piezotisch-DLL aufgetreten.';
    203 : result := 'Es konnte kein DLL-Handle für die Piezotisch-DLL gefunden werden.';
    204 : result := 'Es ist ein Fehler beim Laden der Funktionen aus der Piezotisch-DLL aufgetreten.';
    205 : result := 'Es konnte keine Kommunikationschnittstelle für den Piezotisch gefunden werden.';
    206 : result := 'Es ist ein Fehler beim Verbindungsaufbau mit dem Piezotisch aufgetreten.';
    207 : result := 'Piezotisch ist nicht Verfügbar.';
    208 : result := 'Bei der Verfügbarkeitsprüfung für den Piezotisch sind Fehler gefunden worden.';
    209 : result := 'Piezotisch konnte nicht intialisiert werden.';
    210 : result := 'Bei der Initialisierung des Piezotisch ist ein Fehler aufgetaucht.';
    // Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
    // und auch die Protokollierung erfolgt.

    /////////////////////////////////////////////////////////////////////////////////////
    // ControlerBoard-Fehler //
    /////////////////////////////////////////////////////////////////////////////////////
    300 : result := 'Kommunikation mit ControlerBoard wird aufgebaut';
    301 : result := 'Die DLL des ControlerBoards ("K8055D.DLL") konnte nicht gefunden werden.';
    302 : result := 'Es ist ein Fehler beim Zugriff auf die ControlerBoard-DLL aufgetreten.';
    303 : result := 'Es konnte kein DLL-Handle für die ControlerBoard-DLL gefunden werden.';
    304 : result := 'Es ist ein Fehler beim Laden der Funktionen aus der ControlerBoard-DLL aufgetreten.';
    305 : result := 'ControlerBoard konnte nicht intialisiert werden.';
    306 : result := 'Bei der Initialisierung des ControlerBoard ist ein Fehler aufgetaucht.';
    // Die weiteren Fehlermeldungen werden eingeführt, wenn alle Geräte initialisiert sind
    // und auch die Protokollierung erfolgt.

    end;
  except
    result := 'Es ist ein unbekannter Fehler aufgetreten!';
  end;
  with Datenaustausch do
    begin
      dwData := 0;
      cdData := Length(result) + 1;
      lpData := result;
    end;
  SendMessage(LoaderForm.Handle, WM_COPYDATA, Longint(Handle),
              Longint(@Datenaustausch)); // <-- hier sollte der Datenaustausch stattfinden, dies funzt auch
end;
...
hier die wichtigen Teile der LoaderUnit
Delphi-Quellcode:
const Nachricht_erhalten = WM_COPYDATA;

type
  TLoaderForm = class(TForm)
    ...
  private
    { Private-Deklarationen }
    procedure Nachricht_anzeigen(var MSG: TWMCopyData);message Nachricht_erhalten;
  public
    { Public-Deklarationen }
  end;

...

procedure TLoaderForm.Nachricht_anzeigen(var MSG: TWMCopyData);
var Datenaustausch: TDatenaustausch;
begin
  HilfsLabel.Caption := String(PChar(Msg.CopyDataStruct.lpData)); // <--- hier sollte der Datenaustausch ankommen
  AnzeigeLabel.Left := round((LoaderForm.Width-HilfsLabel.Width)/2);
  AnzeigeLabel.Caption := HilfsLabel.Caption;
end;
...
  Mit Zitat antworten Zitat