| Autor |
Beitrag |
the-kecks
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: Sa 28.02.09 17:24
hi,
ich weiß nicht ob das hier der richtige Bereich ist, aber meines erachtens nach passt der am besten (wenn nicht bitte moven).
also:
ich möchte einen "Chat" für lokale Netzwerke schreiben. Dabei nutze ich den Netzwerkordner auf den alle im Netzwerk zugreifen können. Da ist dann meine Chatdatei din und ne *.txt. das Programm schreibt in die txt rein und gibt dann den gesamten inhalt der txt in einer Memo aus. so kann man mit anderen schreiben. nun muss das programm aber die memo immer aktualisieren wenn ein neuer beitrag geschrieben wurde. ich habs mit einer repeat until schleife versucht aber die klappt net...weiß einer wie ich das machen könnte?
mfg
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.02.09 17:50
Ich fürchte, so wird das nichts. Du wirst Dich wohl oder übel mit Netzwerk-Komponenten auseinandersetzen müssen (Indy, Sockets, Synapse etc.)
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 20:02
An der Stelle weise ich einmal auf die entsprechenden Tutorials von unserem Netzwerkspezialisten  hin, wo du an funktionierendem Code siehst, wie sowas geht:
www.delphi-library.d...iewtopic.php?t=60744
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: Sa 28.02.09 20:15
gibts da keine andere möglichkeit als mein programm komplett umzuschreiben?
möchte nur dass die memo einmal pro sekunde aktualisiert wird. oder wenn möglich sobald ein neuer beitrag beschrieben wurde.
mfg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 20:41
Du kannst einen Timer verwenden, aber richtig funktionieren wird das nicht. Sobald parallel Zugriffe erfolgen bekommst du Probleme.
Zudem müssten alte Einträge gelöscht werden, etc., aber das ist alles nicht so einfach so.
Und wenn jemand scrollt, dann setzt du das ggf. auch zurück. Das ist alles nicht sinnvoll.
Als Übung kannst du sowas basteln, aber ernsthaft benutzen kann man sowas nicht.
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: Sa 28.02.09 22:18
jaenicke hat folgendes geschrieben : | Du kannst einen Timer verwenden, aber richtig funktionieren wird das nicht. Sobald parallel Zugriffe erfolgen bekommst du Probleme.
Zudem müssten alte Einträge gelöscht werden, etc., aber das ist alles nicht so einfach so.
Und wenn jemand scrollt, dann setzt du das ggf. auch zurück. Das ist alles nicht sinnvoll.
Als Übung kannst du sowas basteln, aber ernsthaft benutzen kann man sowas nicht. |
ein autoscroll ist dabei. das ist also kein problem. was meinst du mit "alte einträge"? als Admin kann man die txt komplett leeren falls du das meinst.
mfg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 22:23
Ja, wie gesagt, lies es in einem Timer aus, aber sobald zwei gleichzeitig etwas schreiben, fliegt dir die Konstruktion z.B. um die Ohren. da kannst du höchstens versuchen bei Schreibfehlern kurz zu warten usw., aber letztlich machst du dir mit solch einer Frickellösung nur Ärger und viel Arbeit...
Und so gut funktionieren wie eine richtige Lösung wird es nie, egal was du machst.
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: Sa 28.02.09 23:28
@jaenicke
habs mit dem timer gemacht und try except eingebaut falls ein fehler auftritt. nun hängt das programm sich immer auf ohne einen fehler anzuzeigen. einfach keine rückmeldung mehr
mfg
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 28.02.09 23:32
Was sollen wir jetzt mit dieser "detaillierten" Fehlerbeschreibung anfangen?
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 23:42
Welches Intervall, wie sieht der Code aus, ...?
Hast du es mit debuggen versucht?
Keine Rückmeldung ist oft eine Endlosschleife.
Lass dir doch nicht alles aus der Nase ziehen, meine Kristallkugel schläft leider schon...
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: Sa 28.02.09 23:51
code:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| i:=1; repeat try timer1.interval:=1000; timer1.enabled:=true; Dateipfad := ExtractFilePath(ParamStr(0)) + 'log.txt'; chatlog.LoadFromFile(Dateipfad); memo1.text:=chatlog.text; SendMessage(Memo1.Handle,WM_VSCROLL,SB_BOTTOM,0); chatlog.free; except // falls schreibfehler 1 sek warten und nochmal versuchen sleep(1000); end; until i=2; // endlosschleife damit immer aktualisiert wird |
Ereignisprotokoll:
Erste Zufalls-Exception bei $76E7F35F. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 5C696870. Lesen von Adresse 5C696870'. Prozess Project1.exe (4540)
Erste Zufalls-Exception bei $76E7F35F. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 5C696870. Lesen von Adresse 5C696870'. Prozess Project1.exe (4540)
mfg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 28.02.09 23:55
Eine Endlosschleife, was habe ich gesagt?
Schau dir bitte erst einmal an was ein Timer macht...
Und wenn du es verstanden hast, dann weißt du auch, dass du keine Schleife brauchst (weder überhaupt zum Lesen noch in Kombination mit einem Timer)...
Wie soll denn das Programm noch reagieren, wenn du einfach nur Befehle nacheinander ausführst ohne Gelegenheit zum Neuzeichnen oder reagieren aus die Benutzereingaben zu lassen?
// EDIT:
Wenn du den Timer in der Hilfe nicht findest:
docs.codegear.com/do...ExtCtrls_TTimer.html
Zuletzt bearbeitet von jaenicke am So 01.03.09 00:01, insgesamt 1-mal bearbeitet
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 01.03.09 00:00
Kommst Du ursprünglich von (Turbo-)Pascal? Das würde dieses Konstrukt nämlich erklären. Windows ist ereignisorientiert, d.h. bei bestimmten Ereignissen kannst Du reagieren.
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: So 01.03.09 00:03
die schleife braucht man da sobald einmal eine exception (der schreibfehler) auftritt is nicht mehr viel mit aktualisieren ohne die schleife. und da unendlich viele exceptions auftreten können...
@DeddyH
ne. delphi ist meine erste richtige programmiersprache. das einzige was ich noch kann ist windows cmd/batch. das ist aber net wirklich eine programmiersprache.
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 01.03.09 00:13
Ein Timer wird zyklisch aufgerufen, d.h. er übernimmt quasi die Aufgabe Deiner Schleife.
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: So 01.03.09 00:15
the-kecks hat folgendes geschrieben : | die schleife braucht man da sobald einmal eine exception (der schreibfehler) auftritt is nicht mehr viel mit aktualisieren ohne die schleife. und da unendlich viele exceptions auftreten können...
@DeddyH
ne. delphi ist meine erste richtige programmiersprache. das einzige was ich noch kann ist windows cmd/batch. das ist aber net wirklich eine programmiersprache. |
lies bitte den oberen teil meines posts.
mfg
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 01.03.09 00:29
Und wo steht der Code? Ich vermute du benutzt nicht einmal das Ereignis OnTimer des Timers...
Du kannst kurz eine Schleife einsetzen, die aber nur ein paar (gezählte genau definierte) Versuche machen sollte, vielleicht 5 oder so maximal, und das auch nur beim Schreiben.
In der Schleife hat aber keine Zuweisung des Intervalls oder eine Aktivierung des Timers zu suchen, den du ja nur zum Lesen brauchst. Da brauchst du aber keine Schleife, wenn das Lesen mal fehlschlägt, wird es dann eben eine Sekunde später gelesen (oder auf was du das Intervall einstellst).
Und statt Sleep solltest du Delay benutzen:
www.delphipraxis.net...delay+revisited.html
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 01.03.09 00:33
Delay oder Sleep sind in einem Timer-Event aber sowieso fehl am Platz.
|
|
the-kecks 
      
Beiträge: 157
Erhaltene Danke: 1
Windows Vista Home Premium 64Bit
Delphi 7 Ent.
|
Verfasst: So 01.03.09 00:40
danke jaenicke hab alles so gemacht wie du gesagt hast und jetzt funzt es
mfg
|
|