![]() |
Problem beim Senden mit SendBuf (TFont, TColor)
Delphi-Quellcode:
TBefehl = record TagFont : TFont; TagString : String; TagColor : TColor; TagInteger : Integer end;
Delphi-Quellcode:
Dann kommt eine Fehlermeldung.
procedure senden;
var Befehl : TBefehl; begin Befehl.TagFont := Form1.font; Befehl.TagString := ''; Befehl.TagColor := clBlack; Befehl.TagInteger := 0; Form1.Client.Socket.SendBuf(Befehl,sizeOf(Befehl)); end; Wie kann ich dieses Problem lösen? |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Welche Fehlermeldung kommt und wo tritt sie auf (Beim Senden oder vorher)?
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Delphi-Quellcode:
Das ist der richtige Quellcode.
type
TBefehl = record TagFont : TFont; TagString : String; TagColor : TColor; TagInteger : Integer end; |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Beim Senden.
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Fehler beim Schreiben von Addresse 0000004 oder so ähnlich...
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Mist, schon wieder ein Fehler... Der String ist auf 255 Zeiten begrenzt.
Delphi-Quellcode:
TagString : String[255];
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Hi,
hinter TFont und string verbergen sich eigentlich Zeiger. Legst du sie in einem Record ab und verschiffst sie, dann geht die Bedeutung dieser Zeiger verloren. Im schlimmsten Fall kommt es zu den von dir beobachteten Fehlern. Grüße vom marabu |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Wie kann ich dieses Problem den umgehen? Und was sind Zeiger? (Cursor sind wohl kaum gemeint)
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
zeiger sind sowas wie ein integer wert, der anzeigt wo im speicher z.b. der string liegt.
zum anderen...
Delphi-Quellcode:
TColor = -$7FFFFFFF-1..$7FFFFFFF;
heisst, tColor=integerwert (?) mfg edit: mit TColor(Wert) kannst du sie wieder zum TColor machen und andersrum... TypeCast? |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Zeiger heißen auch Pointer. TFont ist eine Klasse und string ist ein spezieller Delphi Datentyp. Es sind diese beiden Eigenschaften, die eine direkte Übertragung zu einem Empfänger unmöglich machen.
Um einen unbegrenzt langen string zu übertragen, benötigst du ein Protokoll - z.B. kannst du zuerst die Anzahl der Zeichen avisieren und anschließend die Zeichen des Strings übermitteln. Das funktioniert mit kurzen und langen Strings gleichermaßen gut. Beim Font solltest du besser den Namen und die Schriftgröße verschicken, das sind Zeichen und Zahlen, da gibt es kaum Probleme. |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
HI,
ich würd dir empfehlen, alles in einen Stream zu schreiben und diesen dann zu verschicken. Hierbei treten auch keine Probleme mit zu langen Strings auf, vorrausgesetzt, du hast ein Trennungszeichen (z.B. #) was in den Strings etc. nicht vorkommen darf. Strings speicherst du am einfachsten mit Stream.Write(Str[1], Length(Str)). Die 1 ist wichtig, da alles in einem Stream in einem Pointer abgelegt wird. Schreibst du den String direkt mit Stream.Write(Str, Length(Str)), wird was ganz komisches geschrieben, aber nicht der String. Streams werden mit SendStream verschifft. Bernhard |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Liste der Anhänge anzeigen (Anzahl: 1)
:?: :?: :?:
Okay, damit bin ich etwas überfordert... Ich habe einen Chat programmiert, wo alles Super funktioniert hat... |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
![]() habe auch mal einen kleinen chat gescrieben... [OT]bist ja nur 2 Jahre älter als ich...[/OT] klar mit streams gehts imho besser..., aber das sollte man erst einsetzen wenn man es verstanden *g* mhm @rollstuhlfahrer meinst du das man einfach den str in einem stream ablegt und den also z.b. Irgendwas: TStream macht? mfg |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Was sind Pointer, wie programmiert man diesen Stream, wie setzt man Trennungszeichen, wie senden man Streams?
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Mir fällt grade auf, dass die meisten kaum älter, gar jünger sind als ich...
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Bei deinem Chat schlägt mein Scanner Alarm, obwohl ich nicht glaube, dass er berechtigt ist...
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
beim server?
ist normal... mfg |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
@faeX: Könntest du bitte in Zukunft deine Beiträge editieren (Edit-Button rechts über deinem Beitag) und nicht mehrere Beiträge unmittelbar nacheinander schreiben? Das nennt man "pushen" und ist hier nicht gern gesehen :wink:
|
Re: Problem beim Senden mit SendBuf (TFont, TColor)
@Fussball-Robby: Danke für den Tipp, bin noch nicht lange dabei...
und wie programmiere ich diese Streams nun? nunja meine Mutter möchte dass ich essen komme, werde mir eure antworten später durchlesen |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Streams gehen ganz einfach. In der Unit Classes sind
![]() ![]() ![]() ![]() Streams gehen so:
Delphi-Quellcode:
Pointer sind Zeiger auf bestimmte Speichertypen. Übergibst du einer Funktion/Prozedur ein Objekt, so wird nur der Zeiger übergeben (nicht da Objekt seblst). Greifst du dann darauf zu, änderst du in allen Variablen dieses Objektes, das du übergeben hast, die Eigenschaft. (Hier ist jetzt aber nicht gemeint, dass man von jeder Klasse nur 1 Instanz erzeugen kann. Es wird eben das von der aktuellen Instanz geändert.)
var Stream: TMemoryStream // mein Liebling unter den Streams
begin Stream := TMemoryStream.Create; // Erstellen Stream.Write(Edit1.Text[1], Length(Edit1.Text)); // Reinschreiben Stream.Position := 0; // Auf den Anfang setzen Form1.Client.Socket.SendStream(Stream); // Verschicken // Ein .Free ist hier nicht notwendig, da das die Prozedur SendStream übernimmt end; Zitat:
Zitat:
Zitat:
Prüfe mal deine EXE z.b. bei ![]() Bernhard |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Okay das klappt schon ganz gut, aber wie empfange ich das ganze jetzt wieder?
Soetwas wie Client.Socket.ReceiveStream kennt er nicht. |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Zitat:
Ansonsten musst du irgendwie (weiß ich grad selbst nicht genau) mit ReciveBuf und ReciveLength arbeiten. Kann ich aber nicht mehr so genau nachvollziehen, da bei mir die SocketKomponenten grad net so laufen, wie sie sollen (Antwort kommt nicht an). Bernhard EDIT: maximale Paketgröße: 4096 Byte (=4KB) ClientRead/Write wird mehrmals aufgerufen |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Ach du Schande, 4KB reichen nimmer.
Sollte ich da nicht auf TFileStream umsteigen? EDIT: Oder der Stream, der bei den Messagern (ICQ, Skype etc.) verwendet wird. |
Re: Problem beim Senden mit SendBuf (TFont, TColor)
Zitat:
rollstuhlfahrer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz