AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Warum seh ich den Record Inhalt nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

Warum seh ich den Record Inhalt nicht?

Ein Thema von Spurius · begonnen am 25. Jun 2004 · letzter Beitrag vom 4. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#1

Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 18:18
Hallo,
ich versuch hier grad ein Record mit den Indy-kompos zu verschicken, aber in dem Label wo test.b angezeigt werden soll, steht das nicht drin
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent,
  IdTCPServer, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    server: TIdTCPServer;
    client: TIdTCPClient;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Image1: TImage;
    Image2: TImage;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure serverExecute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }

  public
    { Public-Deklarationen }
  end;
  TTest=record
  a,b,c: String;
  end;
var
  Form1: TForm1;
  Test: TTest;
implementation

{$R *.dfm} 


procedure TForm1.FormCreate(Sender: TObject);
begin
server.Active := true;
memo1.Lines[0] := '';

end;

procedure TForm1.Button1Click(Sender: TObject);
Var Stream: TMemoryStream;
begin
 client.Connect();
 Test.a := 'a';
 Test.b := 'b';
 Test.c := 'c';
 Stream := TMemoryStream.Create;
 Stream.Position := 0;
 Stream.Write(Test,sizeof(Test));

 Client.OpenWriteBuffer;
 Client.WriteStream(Stream);
 Client.CloseWriteBuffer;
 Stream.Free;
end;

procedure TForm1.serverExecute(AThread: TIdPeerThread);
Var stream2: TMemorystream;
    Test2: TTest;
begin
 label1.Caption := '--';
 Stream2 := TMemoryStream.Create;
 Stream2.Clear;
 Athread.Connection.ReadStream(Stream2, -1, true);
 Stream2.Position := 0;
 Stream2.Read(test2, sizeOf(TTest));
 label1.Caption := test2.b;
 showmessage(test.a);
end;

end.
Wenn ich den Stream in eine TXT speichere, kommt folgendes dabei heraus:

`ä pä €ä

Hoffe mir kann jemand helfen.
Gruß
Spurius
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:02
Hallo,
Dein Problem ist der String im Record. Lange Strings lassen sich nicht so einfach in einen
Stream schreiben. Deklariere Deine Record zum Test mal wie folgt:
Delphi-Quellcode:
  TTest=record
  a,b,c: String[50];
  end;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#3

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:10
Also wenn ich da in eine TXT speicher, kommt jetzt das:
a b c
Aber mit mehr abstand dazwischen. In dem Label erscheint allerdings immer noch nichts
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:12
Zitat von Spurius:
Also wenn ich da in eine TXT speicher, kommt jetzt das:
a b c
Aber mit mehr abstand dazwischen. In dem Label erscheint allerdings immer noch nichts
Tut mir Leid, ich weiss nicht was Du mir oder einem Andren sagen möchtest.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#5

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:18
Ich möchte damit lediglich kundtun, dass der Record Inhalt anscheinend nicht richtig übermittel wird. Zum Test habe ich ihn in eine Textdatei gespeichert, wobei das oben geschriebene herausgekommen ist. Deshalb würde ich gerne wissen, ob du oder ein anderer mir weiterhelfen kannst/kann.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:20
Hast Du mein Posting zu Deinem Record gelesen ??
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#7

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:23
Ja, ich habs auch ausprobiert, nur geht leider nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Warum seh ich den Record Inhalt nicht?

  Alt 25. Jun 2004, 19:25
Dann versuch mal diesen Source:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdTCPConnection, IdTCPClient, IdBaseComponent,
  IdComponent, IdTCPServer;

type

  TTest=record
  a,b,c: String[50];
  end;
  
  TForm1 = class(TForm)
    Server: TIdTCPServer;
    Client: TIdTCPClient;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure ServerExecute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }
    FTest : TTest;
    procedure UpdateForm;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  Server.Active:=Not Server.Active;
  If Server.Active then
    Button1.Caption:='Shutdown Server'
    else
      Button1.Caption:='Run Server';
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  Test : TTest;
  MStream : TMemoryStream;
begin
  Test.a:='Jens Schumann';
  Test.b:='at';
  Test.c:='www.DelphiPraxis.net';

  MStream:=TMemoryStream.Create;
  Client.Connect;
  Try
    MStream.Write(Test,SizeOf(TTest));
    Client.OpenWriteBuffer;
    Client.WriteStream(MStream,True,True);
    Client.CloseWriteBuffer;
  Finally
    Client.Disconnect;
    MStream.Free;
    end;
end;

procedure TForm1.ServerExecute(AThread: TIdPeerThread);
{Achtung: Diese Event wird im Kontext das Indy-Thread ausgeführt.
D.h. nicht im Kontext des MainThread's deshalb werden Aktualisierungen
des Formulars über Synchronize gemacht}

var
  Test : TTest;
  MStream : TMemoryStream;
  F : TThread;
begin
  MStream:=TMemoryStream.Create;
  Try
    Athread.Connection.ReadStream(MStream);
    MStream.Position:=0;
    MStream.ReadBuffer(FTest,SizeOf(TTest));
    AThread.Synchronize(UpdateForm);
  Finally
    MStream.Free;
    end;
end;

procedure TForm1.UpdateForm;
begin
  Memo1.Clear;
  Memo1.Lines.Add(FTest.a);
  Memo1.Lines.Add(FTest.b);
  Memo1.Lines.Add(FTest.c);
end;

end.
Angehängte Dateien
Dateityp: zip zip_409.zip (239,9 KB, 12x aufgerufen)
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#9

Re: Warum seh ich den Record Inhalt nicht?

  Alt 26. Jun 2004, 13:45
Hallo,
ich hab das mit dem Synchronize eingebaut, aber es geht immer noch nicht:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdTCPConnection, IdTCPClient, IdBaseComponent, IdComponent,
  IdTCPServer, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    server: TIdTCPServer;
    client: TIdTCPClient;
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    Image1: TImage;
    Image2: TImage;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure serverExecute(AThread: TIdPeerThread);
  private
    { Private-Deklarationen }
    procedure UpdateForm;
  public
    { Public-Deklarationen }
  end;
  TTest=record
  a,b,c: String[50];
  end;
var
  Form1: TForm1;
  Test, Test2: TTest;
implementation

{$R *.dfm} 


procedure TForm1.FormCreate(Sender: TObject);
begin
server.Active := true;
memo1.Lines[0] := '';

end;

procedure TForm1.Button1Click(Sender: TObject);
Var Stream: TMemoryStream;
begin
 client.Connect();
 Test.a := 'a';
 Test.b := 'b';
 Test.c := 'c';
 Stream := TMemoryStream.Create;
 Stream.Position := 0;
 Stream.Write(Test,sizeof(Test));

 Client.OpenWriteBuffer;
 Client.WriteStream(Stream, True, True);
 Client.CloseWriteBuffer;
 Stream.Free;
end;

procedure TForm1.serverExecute(AThread: TIdPeerThread);
Var stream2: TMemorystream;

begin
 label1.Caption := '--';
 Stream2 := TMemoryStream.Create;
 Stream2.Clear;
 Athread.Connection.ReadStream(Stream2, -1, true);
 Stream2.Position := 0;
 Stream2.ReadBuffer(test2, sizeOf(TTest));
 AThread.Synchronize(UpdateForm);
 Stream2.SaveToFile('c:/streamtest.txt');
end;
procedure TForm1.UpdateForm;
begin
 showmessage('Ausgeführt!'); // wird nicht angezeigt
 Label1.Caption := test2.b;
end;
end.
Das Showmessage wir nur ausgeführt, wenn ich das Fenster schließe, da sieht man es kurz.
D.h. dass das UpdateForm gar nicht ausgeführt wird oder?
  Mit Zitat antworten Zitat
Spurius

Registriert seit: 19. Aug 2003
294 Beiträge
 
Delphi 7 Professional
 
#10

Re: Warum seh ich den Record Inhalt nicht?

  Alt 26. Jun 2004, 14:13
Hallo, es geht jetzt, ich hba das hier weggelassen:
Label1.Caption := '--'; Weiss zwar net warum es so ist, aber naja.
Vielen Dank für die Hilfe
Gruß
Spurius
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:46 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