Hallo alle...
ich versteh´s nicht und hoffe auf Ideen.
vereinfachter Aufbau:
procedure ComConnect; // enthällt Comport.Connected:= True;
procedure ComDisconnect; // enthällt ComPort.Connected:= False;
Problem:
- ComConnect funktioniert überall.
- ComDisconnect funktioniert in einer z.B. Click Procedure
- ComDisconnect funktioniert nicht beim Aufruf in einem eigenen Event und bleibt bei "// <-- hier" hängen...
Delphi-Quellcode:
procedure TCustomComPort.Close;
begin
// if already closed, do nothing
if FConnected and not (csDesigning in ComponentState) then
begin
CallBeforeClose;
// abort all pending operations
AbortAllAsync;
// stop monitoring for events
if FThreadCreated then
begin
FEventThread.Free; // <-- hier
FThreadCreated := False;
if FSyncMethod = smWindowSync then
{$IFDEF DELPHI_6_OR_HIGHER}
{$WARN SYMBOL_DEPRECATED OFF}
{$ENDIF}
DeallocateHWnd(FWindow);
{$IFDEF DELPHI_6_OR_HIGHER}
{$WARN SYMBOL_DEPRECATED ON}
{$ENDIF}
end;
// close port
DestroyHandle;
FConnected := False;
// port is closed, do any additional finalization
CallAfterClose;
end;
end;
... in einer Art Endlosschleife hängen.
Ich bin ratlos und weiß nicht wie ich es besser beschreiben soll...
Danke für Info´s
Hintergrund:
Im Fehlerfalle (z.B. Timeout... eigenes Event) soll der ComPort geschlossen werden. --> hängt
Beim Disconnect über einen Menüpunkt z.B. wird der ComPort ordnungsgemäß getrennt.
! der Aufruf ist in beiden Fällen identisch
Hinweis: Der betroffene ComPort liefert als Antwort das Kommando zurück obwohl nix physikalisch angeschlossen ist. Merkwürden läßt grüßen.
Nachtrag:
Ich wollte grad mal in der Systemsteuerung schauen ob der ComPort konfigurierbar ist. Tja, da ist keiner gelistet und mein Laptop hat auch keinen
Ich dachte immer daß der ComPort, der angeboten wird, virtuell ist. Wo nimmt Vista den Port, welcher sich öffnen läßt, her ?
Ich geh dann mal ne Buddel Roten aufmachen... da kann man wenigstens nix falsch machen.
Nachtrag1:
Der ComPort ist einem eingebautem Modem zugeordnet...wußte gar nicht daß es sowas noch gibt