Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Wieso geht dieser Code nicht? (Kompletter Code da) (https://www.delphipraxis.net/42889-wieso-geht-dieser-code-nicht-kompletter-code-da.html)

-homer- 25. Mär 2005 13:05


Wieso geht dieser Code nicht? (Kompletter Code da)
 
Delphi-Quellcode:
unit Friends;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, jpeg, StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdFTP, OleCtrls, SHDocVw_TLB, urlMon;

type
  TmainForm = class(TForm)
    MainMenu1: TMainMenu;
    Connect1: TMenuItem;
    World1: TMenuItem;
    Hilfe1: TMenuItem;
    Connect2: TMenuItem;
    N1: TMenuItem;
    Beenden1: TMenuItem;
    Panel1: TPanel;
    Image1: TImage;
    text: TEdit;
    bsend: TButton;
    nicks: TListBox;
    ftp: TIdFTP;
    chat: TWebBrowser_V1;
    Timer: TTimer;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button1: TButton;
    procedure Beenden1Click(Sender: TObject);
    procedure Connect2Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure TimerTimer(Sender: TObject);
    procedure bsendClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  mainForm: TmainForm;



implementation

{$R *.dfm}

procedure Delay(dwMilliseconds: Longint);
var
  iStart, iStop: DWORD;
begin
  iStart := GetTickCount;
  repeat
    iStop := GetTickCount;
    Application.ProcessMessages;
  until (iStop - iStart) >= dwMilliseconds;
end;


procedure TmainForm.Beenden1Click(Sender: TObject);
begin
  mainForm.Close;
end;

procedure TmainForm.Connect2Click(Sender: TObject);
begin
  ftp.Password := 'sag ich nicht ;)';
  ftp.Username := 'friendsmain';
  ftp.Host := 'friendsmain.fr.funpic.de';
  ftp.Connect(true);
  chat.Navigate('friendsmain.funpic.de/chat.txt');
  bsend.Enabled := true;
  timer.Enabled := true;
end;

procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  ftp.Disconnect;
end;

procedure TmainForm.TimerTimer(Sender: TObject);
begin
  if ftp.Connected = true then
  begin
    chat.Navigate('friendsmain.funpic.de/chat.txt');
  end;
  URLDownloadToFile(nil,pchar('http://friendsmain.fr.funpic.de/chat.txt'),pchar('C:\Fainds-Friends\chat.txt'), 0, nil);
end;

procedure TmainForm.bsendClick(Sender: TObject);
begin
  timer.Enabled := false;
  with OpenDialog1 do
  begin
    Memo1.Lines.LoadFromFile('c:/Fainds-Friends/chat.txt');
  end;
  Memo1.Lines.Text := Memo1.Lines.Text + #13 + text.Text;
  with savedialog1 do
  begin
    memo1.Lines.SaveToFile('c:/Fainds-Friends/chat.txt');
  end;
  ftp.Put('c:/Fainds-Friends/chat.txt', 'chat.txt');
  timer.Enabled := true;
end;

end.


hi mit diesem Code will ich einen kleinen chat schreiben... aber keinen normalen! der eigentlich chat text soll auf dem angegebenen server gespeichert werden! Ich weiß, dass man einen chat auch leichter programmieren kann, aber ich habe mich für diese variante entschieden, weil hierraus später ein spiel werden soll... wäre nett, wenn ihr hier den fehler raus picken könntet! danke

isofaind

malo 25. Mär 2005 13:07

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Sagst du uns wenigstens, WAS nicht funktioniert? :roll:

ereetzer 25. Mär 2005 13:08

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
wie ist denn die Fehlermeldung ?

Pr0g 25. Mär 2005 13:08

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Was genau funktioniert denn nicht? Das Speicher, das Laden...

Mit ist noch aufgefallen, dass du
Delphi-Quellcode:
if ftp.Connected = true then
schreibst, das "= true" kannst du weglassen, also einfach
Delphi-Quellcode:
if ftp.Connected then
MfG Pr0g

-homer- 25. Mär 2005 13:12

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
also folgendes klappt:

ich starte das programm. dann klicke ich auf connect. nun ist er zum server connectet... unten in die edit box schreibe ich hallo rein. dann klicke ich auf send. Nun wir der komplette text + dem text unten in der edit hochgeladen! Das funktioniert auch alles. hjabe ich über ein ftp programm getestet! ich habe dem timer gesagt, dass er jede sekunde den chat text aktualisieren soll. das macht er aber nicht... ich muss also mein programm neustarten, damit der text angezeigt wird, den ich geschrieben habe! woran liegt das?


isofaind

jfheins 25. Mär 2005 13:12

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Erstmal ein paar Änderungen:

Delphi-Quellcode:
procedure TmainForm.TimerTimer(Sender: TObject);
begin
  if ftp.Connected then
  begin
    chat.Navigate('friendsmain.funpic.de/chat.txt'); // was hat das eigendlich für einen sinn ???
  end;
  URLDownloadToFile(nil,pchar('http://friendsmain.fr.funpic.de/chat.txt'),pchar('C:\Fainds-Friends\chat.txt'), 0, nil);
Memo1.LoadfromFile ('c:/Fainds-Friends/chat.txt'); // damit lädt er das dann auch ...
end;

procedure TmainForm.bsendClick(Sender: TObject);
begin
  timer.Enabled := false;
  Memo1.Lines.LoadFromFile('c:/Fainds-Friends/chat.txt');

  Memo1.Lines.Add (text.Text);

  // Open und close-dialog brauchste nicht, wenn du sie nicht benutzt ...

  memo1.Lines.SaveToFile('c:/Fainds-Friends/chat.txt');
 
  ftp.Put('c:/Fainds-Friends/chat.txt', 'chat.txt');
  timer.Enabled := true;
end;

end.

-homer- 25. Mär 2005 13:14

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
hi,
@jfheins: der sinn liegt darin, dass der browser ('chat'), jede sekunde den aktuellen chat text von dem ftp server anzeigen soll

isofaind

Luckie 25. Mär 2005 13:18

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Zitat:

Zitat von -homer-
hi,
@jfheins: der sinn liegt darin, dass der browser ('chat'), jede sekunde den aktuellen chat text von dem ftp server anzeigen soll

Und was denkst du, wie performant das werden wird? Vorallem wirst du das im Internet nicht schaffen sekündlich die Datei runterzuladen.

-homer- 25. Mär 2005 13:24

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
@luckie:
es ist egal wie ich den timer einstelle! habe auch schonmal mit einer minute versucht! ich kann sogar manuell per knopfdruck versuchen den browser zu aktivieren! der reagiert nicht!


isofaind

-homer- 25. Mär 2005 13:26

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
das problem liegt darin: am anfang hab ich dem prog gesagt der browser soll eine bestimmte seite anzeigen... später kann ich diese seite nicht aktuallisieren... egal ob manuell oder mitm timer

-homer- 25. Mär 2005 13:28

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
das problem liegt darin: am anfang hab ich dem prog gesagt der browser soll eine bestimmte seite anzeigen... später kann ich diese seite nicht aktuallisieren... egal ob manuell oder mitm timer


sry 4 double!

PierreB 25. Mär 2005 13:30

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Diese Art von Chat ist aber sowas von uneffizient ! Nimm lieber die Indys oder WinSockets.
Und 3 Postings hintereinander muss das sein ? denk doch vorher nach ob dir noch was einfällt wenn du was abschickst. :roll:

-homer- 25. Mär 2005 13:59

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
@pierreb:

ich habe doch schon gesagt, dass man einen normalen chat anders schreiben würde... ich will diese programm aber sspäter als spiel erweitern ziehe daher diese mthode vor...

isofaind

jfheins 25. Mär 2005 14:12

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Mit
Zitat:

was hat das eigendlich für einen sinn ???
Meinte ich eigentlich, wozu in dem Timer überhaupt FTP gebraucht wird. Du lädtst doch nur die eine Datei runter, und stellst sie dar, da müssten eigendlich die 2 zeilen reichen ...

mr47 25. Mär 2005 14:16

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Zitat:

Zitat von -homer-
@pierreb:

ich habe doch schon gesagt, dass man einen normalen chat anders schreiben würde... ich will diese programm aber sspäter als spiel erweitern ziehe daher diese mthode vor...

isofaind

Und mit weivielen Usern willst du das spielen? Ich glaub nicht, dass das geht wenn da 20 Leute alle auf einer Datei rumschreiben...

mfg

SirThornberry 25. Mär 2005 14:23

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
[OT]selbst wenn es als grundlage für eins spiel ist, ist es ineffizent, denn auch bei einem Spiel kann man das ganze im speicher lassen (eben nen extra serverprogramm) oder eben den chat unabhängig von der Dateiarbeit erledigen.

Könntest du bitte den Titel des Threads ändern? Der aktuelle Titel sagt nix über dein Problem aus! du könntest ebenso schreiben, "habe ein problem" was dann auch nicht dem Codex der DP entsprechen würde.[/OT]

-homer- 25. Mär 2005 15:18

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
öhm ist ja alles lieb nd nett, aber die haupt frage hat noch keiner beantworten können: wieso kann ich wenn das programm läuft den browser nicht mehr aktualisieren?
:)
hatte ja von anfang an gesagt, dass es nicht die beste methode ist, die es gibt!

isofaind

jfheins 25. Mär 2005 15:20

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
Probier mal folgende Timerprozedur:
Delphi-Quellcode:
URLDownloadToFile(nil,pchar('http://friendsmain.fr.funpic.de/chat.txt'),pchar('C:\Fainds-Friends\chat.txt'), 0, nil);
Memo1.LoadfromFile ('c:/Fainds-Friends/chat.txt');
Application.ProcessMessages;

-homer- 25. Mär 2005 15:27

Re: Wieso geht dieser Code nicht? (Kompletter Code da)
 
habs probiert geht leider nicht! hmm... des kann doch nicht sein... beim button connect sage ich ihm doch auch, dass er refreshen soll... jetzt klappt es nichtmehr :(


isofaind


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