Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi memoinhalte werden in form1.caption geschrieben ?!?!?! (https://www.delphipraxis.net/134661-memoinhalte-werden-form1-caption-geschrieben.html)

Maltimore 26. Mai 2009 16:39


memoinhalte werden in form1.caption geschrieben ?!?!?!
 
HI, ich hab ja eben schon gepostet, aber mir konnte leider keiner helfen (anscheinend).

Ich hab jetzt noch n problem und zwar lief jetzt alles mit dem progammieren des chats gut, jetzt habe ich bei der ausgabe nur noch eine if abfrage ergänzt (damit sachen, die zum protokoll gehören, nicht in den chat geschrieben werden), und schon verhält sich mein programm absolut ABSURD. aber wirklich total bekloppt!
Es ist nun nämlich so, dass die sachen, die eigentlich ins memo geschrieben werden sollen, ins form1.caption geschrieben werden. wie kann das denn bitte sein? ist der fehler bekannt oder bin ich der einzige bei dem sich das so verhält?

hier der code der dafür verantwortlich sein sollte:

Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
  var k, i: integer;
begin
Form1.Show;
text := socket.receivetext;
if text[1] <> ',' then
  Memo1.Lines.Add(Socket.ReceiveText)
vielen dank,

maltimore

Gargoyl 26. Mai 2009 16:50

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Zitat:

Zitat von Maltimore
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
  var k, i: integer;
begin
  Form1.Show;
  text := socket.receivetext; // <-- hier ist der Fehler
  if text[1] <> ',' then
    Memo1.Lines.Add(Socket.ReceiveText)

wenn du einfach nur text schreibst, dann setzt du die Caption der Form. Ist wie wenn du Form1.Text oder Form1.Caption schreibst. Benenne deine Variable mal um, z.B. sText statt text, dann stehst auch nicht mehr in der Caption.

Gargoyl

p80286 26. Mai 2009 16:51

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Hallo maltimore,

zunächst, wo hast Du "text" definiert?
ich schlage vor, daß Du text als lokale Variable definierst.
Dann solltest Du mindestens mit length(text) überprüfen ob text[1] nicht in die Botanik zeigt.

Das Verhalten, das Du beschreibst, kenne ich sonst nur aus alten DOS-Zeiten wo mit Zeigern und wilden Variablenredefinitionen Speicherplatz gespart wurde bis es quietschte. Da haben sich schon einmal zwei Variablen den gleichen Speicher geteilt wenn man nicht aufpasste.

Gruß
K-H

Oh mann, an .text=.caption hatte ich gar nicht mehr gedacht!

Maltimore 26. Mai 2009 18:21

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Hey super, echt klasse Leute!
Jetzt wird es nicht mehr in die Caption geschrieben, sondern nirgendwohin. also auch nicht ins memo?! Aber macht euch da lieber keine Gedanken drum, nicht dass es am ende an einer ganz anderen Stelle gehakt hat die ihr gar nicht sehen könnt. Ok also das war schon mal glaub ich n Erfolg, ich werde jetzt überall im Programm showmessages machen, die mich über das Verhalten der Variablen aufklären ^^.

Also nochmals, vielen Dank, und wenn ich den Fehler nicht finde melde ich mich einfach noch mal :)

Maltimore

Gargoyl 26. Mai 2009 18:54

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Probiers doch mal hiermit:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
  k, i: integer;
  sText : String;
begin
  Form1.Show;
  sText := socket.receivetext;
  if sText[1] <> ',' then
    Memo1.Lines.Add(sText)
  (...)
vielleicht klappt es ja. Ich weiss leider nicht was genau du da machst und was an die Socket geschickt wird und welchen Regeln es folgt. Weil du liest ja socket.receivetext 2-mal aus in deinem Code-Snipet und ich geh einfach mal davon aus dass das falsch ist, weil beim 2ten lesen ja nicht nochmal was an die Socket geschickt wurde.

Maltimore 26. Mai 2009 20:54

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Was?

Ich hab zwar nicht verstanden, warum, aber es klappt. Daaaaankeee!! Oh man ich hab echt schon das schlimmste befürchtet, dass ich das ganze programm noch mal umstellen muss. Super. Danke!!

Aber jetzt bin ich natürlich neugierig geworden (hab noch nie in meinem Leben irgendwas mit sockets gemacht):

Warum kann ich denn socket.received text nicht in zwei variablen (sozusagen) abspeichern? wieso sollte sich das denn noch ändern?

Mfg,

Maltimore

quendolineDD 26. Mai 2009 20:58

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Weil Text eine Eigenschaft der Form ist. Daher hast du nicht auf deine lokale Variable Text, sondern auf Form1.Text zugegriffen. Deswegen gibts auch noch so Bezeichner wie Self.

Gargoyl 26. Mai 2009 21:15

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Zitat:

Zitat von Maltimore
Aber jetzt bin ich natürlich neugierig geworden (hab noch nie in meinem Leben irgendwas mit sockets gemacht):

Warum kann ich denn socket.received text nicht in zwei variablen (sozusagen) abspeichern? wieso sollte sich das denn noch ändern?

Stell dir das wie einen Stack vor. Wenn du was wegnimmst, ist es weg. Basta! Anders wäre ja auch doof. Stell dir vor du bekommst in regelmäßigen Abständen etwas an deine Socket geschickt, z.B. jede Sekunde eine neue Text Zeile. Wenn du mit .receiveText immer nur die erste Zeile bekommen würdest, wie würdest du dann die 2te, 3te und alle folgenden Zeilen bekommen? Deshalb: Sobald du die erste Zeile mit .receiveText 'abgeholt' hast, wird sie gelöscht und beim nächsten Aufruf von .receiveText bekommst du die 2te Zeile zurückgeliefert. Eben wie bei einem Stack (ich glaube genau genommen wird es sogar ein Stack sein *g*). Es gibt noch ähnliche Sachen, wie z.B. die Windows Messages, wenn du eine Nachricht gelesen hast, ist sie auch weg und beim nächsten aufruf bekommst du die 2te Nachricht zurückgeliefert. Wobei es bei den Windows Nachrichten eine MessagePreview Funktion gibt die die Nachricht zurück liefert, aber nicht löscht. Vielleicht gibt es sowas auch bei deiner Socket, k/A müsste ich Delphi installieren um nachkucken zu können. Aber einmal gelesen ist es bei .receiveText eben weg. Ist genauso beim Einlesen von einer Datei. Wenn du was gelesen hast, geht die Position innerhalb der Datei auch um den Wert weiter wieviel du gelesen hast.

Maltimore 26. Mai 2009 21:43

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Ah ok, danke Gargoyle, das hört sich sinnig an! Quendoline, ich hab mich wohl etwas verwirrend ausgedrückt, ich meinte schon gar nicht mehr das mit dem text, aber trotzdem danke

So damit hätt ich das also alles verstanden.

Dann noch mal was offtopickiches:

Ich hab ja jetzt beim chat unten das editfeld für die nachrichten und daneben den button senden. jetzt will ich natürlich aber, dass man schon beim druck auf enter das was beim klick auf button gemacht wird, ausgeführt wird. wie mach ich denn das?

Eine idee wäre, ins onkeydown ereignis zu gehen, jedes mal abzufragen ob die taste enter war, un dann bei enter das halt zu machen. ist find ich aber n bisschen aufwendig, oder? Und was ist eigntlich dieser "Code" für die Taste enter? Das müsste ja sowas mit VK_ vorne sein ich kenn mich damit auch überhaupt nicht aus ^^

Vielen Dank schon im Voraus,

Maltimore

Gargoyl 26. Mai 2009 22:11

Re: memoinhalte werden in form1.caption geschrieben ?!?!?!
 
Äh also hier gilt neue Frage = neuer Beitrag, bzw. für nur eine Frage pro Beitrag.

[EDIT]Lösung wieder rausgelöscht. Stell die Frage in einem neuen Beitrag und ich poste die Lösung dort.[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 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