Http Client

Alle Fragen zur Netzwerkkommunikation
dilbatz
Beiträge: 9
Registriert: Mo 11. Mär 2013, 16:38

Re: Http Client

Beitrag von dilbatz »

hm, habe die internetverbindung erst mal ein wenig hintenangestellt, bin gerade noch verzweifelt am herausfinden wie ich komponenten abspeicher und wieder lade, dachte es wäre so einfach wie bei delphi mit:

Code: Alles auswählen

 
fs: TFileStream;
begin
  fs := TFileStream.Create(FileName, fmCreate);
  try
      fs.WriteComponentRes(Form1.Name, Form1);
  finally
    fs.Free;
end;
 


nach ewigem versuchen habe ich jetzt herausgefunden, dass es einen bug im fpc gibt, so dass man die einzelnen komponenten nicht wieder richtig einlesen kann mit fs.Read... .
Irgendjemand in nem forum meinte dann man solle die elternkomponente abspeichern um dem vorzubeugen, -> siehe codebeispiel, allerdings klappt das laden dann nicht, hat jemand ne ahnung wie ich auf einfachste art und weise alle komponenten abspeichern kann und wieder laden kann?
Natürlich könnte ich mir die mühe machen und die eigenschaften jeder einzelnen komponente einzeln abzuspeichern, aber heutzutage, sollte das doch iwie automatisiert gehen mit ner bib.

Danke.
Zum internetproblem werde ich mich dann wieder melden, wenn ich das höchstkomplizierte abspeichern der komponenten im griff hab ;) .

gruß Dilbatz

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Http Client

Beitrag von theo »

Was willst du denn machen?

Und bitte erspare uns überflüssigen Text wie:
"dachte es wäre so einfach wie bei delphi "
"sollte das doch iwie automatisiert gehen mit ner bib."
"habe das gefühl dass die ressourcen für lazarus leider nicht ganz so groß sind wie für delphi)"
"Ich möchte auch keine html komponente eines Freizeitentwicklers nutzen die möglicherweise viele bugs beinhaltet "

Danke!

dilbatz
Beiträge: 9
Registriert: Mo 11. Mär 2013, 16:38

Re: Http Client

Beitrag von dilbatz »

Ich möchte alle Komponenten abspeichern, bisher bin ich dabei vorgegangen wir im wiki von lazarus, habe das tutorial(lazarus/examples/xmlstreaming/) genau befolgt, das speichern klappt auch soweit. Ich kann jedes Objekt(abgeleitet von TComponent) abspeichern nur das laden klappt leider gar nicht, es erscheint immer ein fehler mit einem read zugriff.

Daraufhin habe ich mich nach anderen möglichkeiten erkundigt und es so wie in oben beschriebenem Code versucht, anscheinend ist dieser jedoch buggy: viewtopic.php?f=55&t=3716

Mein Ziel ist es auf möglichst einfache art und weise alle einstellungen und inhalte eines formulars abzuspeichern und beim erstellen der Form wieder zu laden, wenn möglich mit xml , wenn nicht möglich mit etwas anderem.

gruß dilbatz

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Http Client

Beitrag von theo »

dilbatz hat geschrieben:Ich möchte alle Komponenten abspeichern,

Erkläre doch bitte einfach mal warum???


dilbatz hat geschrieben:wenn nicht möglich mit etwas anderem.

Wenn man wüsste was ihr jeweils letztendlich machen wollt, könnte man besser helfen.

Sowas?
http://wiki.freepascal.org/tiOPF/de
oder oder in diese Richtung?
http://wiki.freepascal.org/Pascal_Script
http://wiki.freepascal.org/Pascal_Script_Examples

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Http Client

Beitrag von m.fuchs »

dilbatz hat geschrieben:Mein Ziel ist es auf möglichst einfache art und weise alle einstellungen und inhalte eines formulars abzuspeichern und beim erstellen der Form wieder zu laden, wenn möglich mit xml , wenn nicht möglich mit etwas anderem.


Aha, das ist doch mal eine Aussage. Schau dir doch mal das hier an: http://wiki.freepascal.org/TXMLPropStorage/de
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

dilbatz
Beiträge: 9
Registriert: Mo 11. Mär 2013, 16:38

Re: Http Client

Beitrag von dilbatz »

Hi das abspeichern der komponenteneigenschaften funktioniert soweit, allerdings habe ich jetzt das problem ein Record in dem sich ein paar daten befinden in einer xml datei abzuspeichern.
Ich habe folgenden code verwendet: http://wiki.freepascal.org/XML_Tutorial/de

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var
  Doc: TXMLDocument;                                         // Variable für das Dokument
  RootNode, parentNode, nofilho: TDOMNode;                   // Variable für die Elemente (Knoten)
begin
  try
    // Erzeuge ein Dokument
    Doc := TXMLDocument.Create;
 
    // Erzeuge einen Wurzelknoten
    RootNode := Doc.CreateElement('register');
    Doc.Appendchild(RootNode);                               // sichere den Wurzelelement   
    // Create a parent node
    RootNode:= Doc.DocumentElement;
    parentNode := Doc.CreateElement('usuario');
    TDOMElement(parentNode).SetAttribute('id', '001');       // erzeuge die Attribute für das Elternelement
    RootNode.Appendchild(parentNode);                        // sichere das Elternelement
 
    // Create a child node
    parentNode := Doc.CreateElement('nome');                 // erzeuge einen Kindelement
    // TDOMElement(parentNode).SetAttribute('sexo', 'M');    // erzeuge die Attribute
    nofilho := Doc.CreateTextNode('Fernando');               // füge einen Wert für den Knoten ein
    parentNode.Appendchild(nofilho);                         // sichere den Knoten
    RootNode.ChildNodes.Item[0].AppendChild(parentNode);     // füge das Kindelement in das Elternelement ein
 
    // Create a child node
    parentNode := Doc.CreateElement('idade');                // erzeuge einen Kindelement
    // TDOMElement(parentNode).SetAttribute('ano', '1976');  // erzeuge die Attribute
    nofilho := Doc.CreateTextNode('32');                     // füge einen Wert für den Knoten ein
    parentNode.Appendchild(nofilho);                         // sichere den Knoten
    RootNode.ChildNodes.Item[0].AppendChild(parentNode);     // füge das Kindelement in das Elternelement ein
 
    writeXMLFile(Doc, 'test.xml');                           // schreibe in die XML-Datei
  finally
    Doc.Free;                                                // gib den Speicher frei
  end;
end;


aber leider kommt bei der zeile writeXMLFile(Doc, 'test.xml'); immer folgende fehlermeldung:


unit1.pas(184,33) Error: Incompatible type for arg no. 2: Got "AnsiString", expected "TStream"
Hint: Found declaration: WriteXMLFile(TXMLDocument,TStream);
Hint: Found declaration: WriteXMLFile(TXMLDocument,var Text);
Hint: Found declaration: WriteXMLFile(TXMLDocument,const AnsiString);
unit1.pas(260) Fatal: There were 1 errors compiling module, stopping

könnt ihr mir weiterhelfen?
Danke.

gruß Dilbatz.

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Http Client

Beitrag von Michl »

Ich denke, Du hast die falsche Unit eingebunden.

Im Bsp. im Link wird >uses XMLWrite< genutzt und funktioniert damit tadellos!

Ich habe stattdessen mal >Laz_XMLWrite< eingebunden, welche ebenfalls diese Procedure bereitstellt, und habe damit die selbe Fehlermeldung erstellt bekommen!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten