ich möchte das am COM-Port empfangene char im hauptprogramm weiterverarbeiten. Z.B. an einem Memo anzeigen lassen...
Druckbare Version
ich möchte das am COM-Port empfangene char im hauptprogramm weiterverarbeiten. Z.B. an einem Memo anzeigen lassen...
wenn es nur ein char ist mach es mit postmessage ist besser
PostMessage(<festerhandle>,WM_USER+X,NULL,CHAR);
im Form dann muß du die Funktion des Message handler über schreiben
GrußCode:procedure AppMessages(var Msg: Tmsg; var Handled: Boolean);
....
procedure TMainForm.AppMessages(var Msg: Tmsg; var Handled: Boolean);
// Eigener Messages Handler
begin
if not Handled then
begin
if Msg.message = WM_USER+X then
begin
HandleBuffer(Msg.lParam);
Handled := true;
end;
end;
end;
Hast du es schon mal mit einem Trminel Programm versucht?
Schau mal auf www.emtec.com lade das Terminel Program zoc herunter.
gruß tobias
was nutzt mir ein Terminal programm wenn ich die Daten weiter verarbeiten will ?
Gruß
Und wenn das Hauptprogramm ein Windows-Fenster ist und Du sehr viele Bytes zu senden hast, kannst Du ein Editfeld (sichtbar oder auch nicht) erstellen und mit:
das Editfeld mit szText beschreiben, weil diese Messages in eine Queue gehen.Code:// Text an die Editbox anhängen:
// 1. an das Ende springen
SendMessage (hwndEdit, EM_SETSEL, (WPARAM)-2, (LPARAM)-2);
// 2. Text anhängen
SendMessage (hwndEdit, EM_REPLACESEL, (WPARAM)0 , (int)szText);
Geht natürlich nur bei ASCII-Zeichen.
Bei Binär-Daten kannst Du Dir einen eigene Linked List anlegen, in der jede Message eine neues Element ist (und nach dem Lesen wieder freigegeben wird) oder Du erstellst einen Socket und tauschst die Daten per UDP zwischen dem COM-Empfangs-Thread und dem Hauptprogramm aus.
Blackbird
Du kannst die die Daten die du über das Terminal program einlist sehr wohl weiterverarbeiten.
tobias
@Blackbird warum so kompliziert ?
kann doch einfach auch einer Pointer macher auf ein array of byte
und den per nachricht verschicken. Geht wunderbar mach ich den ganzen tag.
Also im thread:
buffer = new byte[3];
buffer[1] = 1;
buffer[2] = 2;
buffer[3] = 3;
PostMessage(<fensterhandle>,WM_USER,NULL,(long)buf fer);
im Fenster
if Msg = WM_USER then
byte* buffer = (byte*) LPARAM;
// daten ver arbeiten
delete buffer
end if
gruß
Danke für die Antworten, jedoch müsst ihr wissen, dass ich bis jetzt immer am "Messagen" versuchen war, jedoch total nicht durchblicke...
Ich habe Blackbirds Code übernommen, jedoch reklamiert der Builder wegen dem hwindEdit1 (Bei mir heisst das Editfeld Edit1... darum habe ichs geändert... weiss nicht ob man das darf...)
Ich weisss eben lustigerweise auch nicht was ein Handler ist...
Hoffentlich könnt ihr mir trotzdem helfen... ;-)
@surfer,
hwndEdit ist das Handle des Editfeldes, das beim Erstellen des Editfeldes mit
HANDLE hwndEdit = CreateWindows(...);
zurückgeliefert wird.
@NumberFive,
machen kann man das, aber ich code um's Verrecken nicht mehr getrennte new-delete-Paare.
Blackbird
Bei mir gibt es aber wegen dem hwndEdit1 ein Fehler...???