Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internet to Listview (https://www.delphipraxis.net/138573-internet-listview.html)

RedShakal 12. Aug 2009 20:23


Internet to Listview
 
Moin, nachdem ich jetzt schon das dritte das Protokoll gewechselt habe, hab ich mir überlegt ich mach es jetzt so:

Ich lade eine Textdatei auf meinen Server hoch die die wichtigen Daten stehen dann in der Form drin:

Eintrag 1 : Name | Author | Datum
Eintrag 2 : Name | Author | Datum
Eintrag 3 : Name | Author | Datum

Wie ich auf die Datei zugreife ist mir klar -> idHttp.Get(wwww....ww..);
Daten := idHttp.Body;

Nun die Frage: Wie lese ich die Strings aus in einzelne Zeilen und vor allem wie mach ich dem Programm klar das es aufhören soll wenn kein Text mehr kommt ohne das es abstürzt?

mkinzler 12. Aug 2009 20:26

Re: Internet to Listview
 
Trennen kannst
-per StringListe ( Delimiter, DelimitedText)
-Pos()/PosEx()
-Explode
...

RedShakal 15. Aug 2009 17:41

Re: Internet to Listview
 
Ich habe das ganze jetzt nochmal auf TCPIP Basis probiert:


Der Client:

Delphi-Quellcode:
procedure TForm6.Button3Click(Sender: TObject);
var
  Maps : string;
  LI  : TListItem;
  StrArr : TDynStringArray;
begin

 if Form1.Client.Connected = false then
    begin
      Form1.Client.Connect(3000);
    end;
   
  Form1.Client.WriteLn('Maplist');
  Maps := Form1.Client.ReadLn;

  if Length(Maps) > 0 then
    begin
      Maplist.Clear;
      StrArr := Explode('|', Maps);
      LI := Form6.Maplist.Items.Insert(0);
      LI.Caption :=  StrArr[1];
      LI.SubItems.Add(StrArr[3]);
      LI.SubItems.Add(StrArr[2]);
    end;

  Form1.Client.Disconnect;
end;

Der Server:

Delphi-Quellcode:
if StrArr[0] = 'Maplist' then
    begin
       ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+ 'maplist.ini');
       try
         Anzahl  := ini.ReadInteger('Maplist','Anzahl',0);
         for i := 1 to Anzahl do
           Maps := ini.ReadString('Maplist', IntToStr(i), '');
           AThread.Connection.WriteLn('Maplist|'+Maps);
           Sleep(100);
          finally
            ini.free;
          end;
    end;

Die Maplist:

Delphi-Quellcode:
[Maplist]
Anzahl=4
1=area_Fayt_51|D-FENS|29.07.09
2=Die_Sanduhr|D-FENS|29.07.09
3=Krossfire|D-FENS|29.07.09
4=Iron_Mountain|D-FENS|02.08.09
5=CenterWar|veCtor|17.07.09
6=WaterPath|veCtor|21.07.09
7=Maptest|RedShakal|08.08.09
8=newm_01|-|26.07.09
9=newm_02|-|26.07.09
10=newm_03|-|26.07.09
11=newm_04|-|26.07.09
12=mlti_01|-|10.08.09
13=mlti_02|-|10.08.09
14=mlti_03|-|10.08.09
15=mlti_04|-|10.08.09
16=mlti_05|-|10.08.09
17=mlti_06|-|10.08.09
18=mlti_07|-|10.08.09
19=mlti_08|-|10.08.09
20=mlti_09|-|10.08.09
21=mlti_10|-|10.08.09
22=mlti_11|-|10.08.09
23=mlti_12|-|10.08.09
24=mlti_13|-|10.08.09
25=mlti_14|-|10.08.09
26=mlti_15|-|10.08.09
Erklärung:

1. Client schickt Anfrage zum Server
2. Server wertet Anfrage aus
3. Server öffnet Map Datenbank ( Ini Datei )
4. Map liest Wert "Anzahl" aus der angibt, wieviele Maps vorhanden sind
5. Server arbeitet Map 1 bis Map (Wert von Anzahl) aus

Bis hierhin funktioniert alles soweit.

6. Server schickt Stringweise die Daten zum Client
7. Der Client schreibt jeden String in die Listview

Wo ist das Problem?

Beim Client kommt immer nur die letzte Map an.
In meinem Fall steht Anzahl auf 4, daher kommt nur Iron_Mountain|D-FENS|02.08.09 in der Listview an.
Ich hatte auch schon versucht die Anzahl in dem String mitzuschicken, aber das endete darin, das ich 3 Leerzeilen hatte und erst dann Map 4 auftauchte. Ich vermute es liegt daran das ich Readln öfter als 1x aufrufen muss aber leider bin ich mir nicht sicher wie ich das anstellen soll. Wie gesagt zählschleifen führen zu leerzeilen.

marabu 15. Aug 2009 17:55

Re: Internet to Listview
 
Hallo Patrick,

weil Du den FOR-Befehl ohne Statement-Block (BEGIN END) ausführst, wird dein WriteLn() erst dann ausgeführt, wenn alle ReadLn() ausgeführt wurden.

Freundliche Grüße

marabu

mkinzler 15. Aug 2009 18:31

Re: Internet to Listview
 
[OT]Hallo Achim, schön mal wieder etwas von dir zu hören (lesen)[/OT]

RedShakal 15. Aug 2009 18:42

Re: Internet to Listview
 
Hallo, ich hab das ganze jetzt mal mit Begin und End ausprobiert. Wenn ich den Button Drücke, wird beim ersten mal "Die Sanduhr" ( Nr. 2) ausgegeben. Ist die erste und einzige Zeile. Wenn ich nochmal draufdrücke, wird "Iron Mountain" ( Nr. 4) ausgegeben.

Warum ist das so?

mkinzler 15. Aug 2009 18:52

Re: Internet to Listview
 
Lass mal das Sleep() weg

jfheins 15. Aug 2009 18:55

Re: Internet to Listview
 
Zitat:

Zitat von RedShakal
Hallo, ich hab das ganze jetzt mal mit Begin und End ausprobiert. Wenn ich den Button Drücke, wird beim ersten mal "Die Sanduhr" ( Nr. 2) ausgegeben. Ist die erste und einzige Zeile. Wenn ich nochmal draufdrücke, wird "Iron Mountain" ( Nr. 4) ausgegeben.
Warum ist das so?

Nicht böse sein, aber:

Bevor ich jetzt Gehirnschmalz aufbringe, um den Code da oben im Kopf nachzuvollziehen wäre es wesentlich effizienter, wenn du deinen Code debuggen würdest.
Der Debugger ist nämlich eines der besten, wenn nicht gar das Beste Werkzeug, um heruaszufinden, warum Codezeile Nr. 42 ausgeführt wird, aber Codezeile Nr. 23 nicht.

Falls du dich damit nicht auskennst, sei dir dieses Tutorial empfohlen: http://www.delphipraxis.net/internal...ct.php?t=47972 ;)

RedShakal 15. Aug 2009 19:29

Re: Internet to Listview
 
So ich hab jetzt ein bissel gebastelt und es funktioniert soweit. Leider macht aber die Listview jetzt Probleme

Delphi-Quellcode:
LI := Form6.Maplist.Items.Insert(i);
        LI.Caption :=  StrArr[1];
        LI.SubItems.Add(StrArr[3]);
        LI.SubItems.Add(StrArr[2]);
        i := i+1;
Eigentlich sollte er ja mit diesem Code jedesmal eine neue Zeile machen, aber leider schreibt er immer in die gleiche Zeile. Habe ich da irgentwas vergessen? I wird beim erstellen auf 1 gesetzt und bei jedem durchgang um 1 erhöht.

mkinzler 15. Aug 2009 19:32

Re: Internet to Listview
 
Versuch es mal mit
Delphi-Quellcode:
LI := Form6.Maplist.Items.Add;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 2  1 2      

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