Autor Beitrag
the-kecks
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.02.09 20:02 
An der Stelle weise ich einmal auf die entsprechenden Tutorials von unserem Netzwerkspezialisten :mrgreen: hin, wo du an funktionierendem Code siehst, wie sowas geht:
www.delphi-library.d...iewtopic.php?t=60744
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Sa 28.02.09 22:18 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: 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



BeitragVerfasst: Sa 28.02.09 23:32 
Was sollen wir jetzt mit dieser "detaillierten" Fehlerbeschreibung anfangen?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: Sa 28.02.09 23:51 
code:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 28.02.09 23:55 
Eine Endlosschleife, was habe ich gesagt?
Schau dir bitte erst einmal an was ein Timer macht... :autsch: :autsch: :autsch:
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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: 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



BeitragVerfasst: So 01.03.09 00:13 
Ein Timer wird zyklisch aufgerufen, d.h. er übernimmt quasi die Aufgabe Deiner Schleife.
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: So 01.03.09 00:15 
user profile iconthe-kecks hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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



BeitragVerfasst: So 01.03.09 00:33 
Delay oder Sleep sind in einem Timer-Event aber sowieso fehl am Platz.
the-kecks Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 157
Erhaltene Danke: 1

Windows Vista Home Premium 64Bit
Delphi 7 Ent.
BeitragVerfasst: So 01.03.09 00:40 
danke jaenicke hab alles so gemacht wie du gesagt hast und jetzt funzt es :)

mfg