Ich habe bei euch schon oft die Suche benutzt
, aber jetzt bin ich an einem Punkt angekommen, an dem ich eure Hilfe mal brauche.
Ich habe den ImageServer (über
TCP) aus den
Indy 9 Demos ein wenig gekürzt, damit ich den Part in mein Programm bauen kann.
Der Server:
Delphi-Quellcode:
procedure TfrmServer.ServerExecute(AThread: TIdPeerThread);
var
Path:
String;
fStream: TFileStream;
tBM: tBitmap;
begin
Try
If Copy(UpperCase(AThread.Connection.ReadLn), 1, 3) = '
SRN'
then
begin
Path := ExtractFileDir(ParamStr(0)) + '
\images\ScreenShot.BMP';
tBM := TBitmap.Create;
ScreenShot(0, 0, Screen.Width, Screen.Height, tBM);
If FileExists(Path)
then DeleteFile(Path);
tBM.SaveToFile(Path);
tBm.FreeImage;
FreeAndNil(tBM);
fStream := TFileStream.Create(Path, fmOpenRead + fmShareDenyNone);
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteStream(fStream);
AThread.Connection.CloseWriteBuffer;
FreeAndNil(fStream);
AThread.Connection.Disconnect;
end;
Except
on E :
Exception do
ShowMessage(E.
Message);
end;
end;
Der Client:
Delphi-Quellcode:
procedure TfrmClient.btnServerScreenShotClick(Sender: TObject);
var
ftmpStream: TFileStream;
Path: String;
begin
Try
With Client do
begin
WriteLn('SRN');
Path := ExtractFileDir(ParamStr(0)) + '\ServerScreen.bmp';
If FileExists(Path) then DeleteFile(Path);
ftmpStream := TFileStream.Create(Path, fmCreate);
While connected do
ReadStream(fTmpStream, -1, True);
FreeAndNil(fTmpStream);
Disconnect;
imgMain.Picture.LoadFromFile(Path);
end;
Except
end;
end;
Nun ist mir eine kleine Sache aufgefallen. In dem Beispiel schickt der Server einen Screenshot an den Clienten. Ich brauche es aber genau andersherum. Daher meine Frage: Kann ich das einfach umkehren ohne dass ich jedem Programm noch das Gegenstück reinpacken muss, sodass jede EXE Server und Client hat?
Da ich es nicht so mit Streams habe, hoffe ich, dass ihr mir helfen könnt.
[APPEND1]: Achja, zur Info: Ich verwende
Indy 9.