AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ini-Wert nicht als string einfügen

Ein Thema von Erutan · begonnen am 28. Feb 2014 · letzter Beitrag vom 2. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
Erutan

Registriert seit: 16. Mär 2013
71 Beiträge
 
Delphi 7 Professional
 
#1

Ini-Wert nicht als string einfügen

  Alt 28. Feb 2014, 23:08
Delphi-Version: 5
Hallo,

ich habe ein Problem mit dem Einlesen eines Ini-Wertes.

Um ein Webformular auszufüllen soll das Programm die Daten aus einer Ini-Datei holen. Macht es auch...allerdings in einem Fall etwas anders als gewollt.

Meine Ini sieht in dem relevanten Beeich folgendermaßen aus:

Delphi-Quellcode:
[OpenPR]
URL=http://www.openpr.de/news/einstellen.html
F1N=name
F1W=EditVorname.Text + ' ' + EditNachname.Text
F2N=email
F2W=EditEmail.Text
Die Edit-Felder EditVrname und EditNachname enthalten die entsprechenden Daten.
Würde ich das nun (wie bisher) statisch machen, würde ich sagen:

Webbrowser1.Navigate('http://www.openpr.de/news/einstellen.html'); Um das dynamisch zu machen, sage ich nun aber

Webbrowser1.Navigate(Ini.ReadString(ComboBoxPresseverteiler.Text, 'URL', '')); Das klappt auch einwandfrei.

Nun will ich die Felder (erst einmal nur das erste) ausfüllen lassen.
Statisch würde ich bei Webbrowser1DocumentComplete sagen:

WebBrowser1.OleObject.document.forms.item(0).elements.item('name')).value := EditVorname.Text + ' ' + EditNachname.Text; Nun will ich die Werte aber aus der Ini ziehen. Dazu habe ich folgendes geschrieben:

WebBrowser1.OleObject.document.forms.item(0).elements.item(Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1N', '')).value := Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1W', ''); Der erste Teil klappt, d.h. es wird das richtige Forlularfeld eigetragen. Der zweite Teil klappt aber leider nicht. Es werden nicht die Inhalte von EditVorname und EditNachname eingetragen, sondern es wird genau das wortwörtlich eingetragen was in der ini steht, nämlich EditVorname.Text + ' ' + EditNachname.Text.

Ist auch eigentlich klar, denn der Code steht zwischen zwei Hochkommas und sollt also wie er ist verwendet werden. Wenn ich die Hochkommas allerdings entferne, meckert der Compiler.

Gibt's nen Weg um das Problem zu lösen? Oder muß ich erst alle Werte aus der Ini in Variablen schreiben und dann die Variablen einfügen?

Grüße
Holger

Edit: Die Werte aus der Ini vorher in eine Variable einfügen habe ich gerade erfolglos probiert. Geht leider auch nicht. Mit Ini.ReadInteger geht's auch nicht. Hmmm....
Holger

Geändert von Erutan (28. Feb 2014 um 23:44 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 00:10
Hallo,

Zitat:
[...] Es werden nicht die Inhalte von EditVorname und EditNachname eingetragen, sondern es wird genau das wortwörtlich eingetragen [...]
Naja, das ist schon richtig so. Du liest ja mit ReadString den entsprechenden Wert aus der INI-Datei ein, und da steht halt nun mal EditVorname.Text + ' ' + EditNachname.Text auch so als Text drin.

Zitat:
[...] Ist auch eigentlich klar, denn der Code steht zwischen zwei Hochkommas [...]
Was meinst Du damit? Das F1W in Deinem Aufruf von ReadString? Das ist doch nur ein Bezeichner für den entsprechenden Schlüssel Deiner INI-Datei - und der muss in einfachen Hochkommata stehen.

Zitat:
[...] Gibt's nen Weg um das Problem zu lösen? Oder muß ich [...]
Das kannst Du so nicht ohne Weiteres in einer INI-Datei ablegen, denn dort kannst Du keine Referenz auf Deine Programmkomponenten speichern, sondern "nur Text". Du kannst zwar Deinen Weg weitergehen, das heißt aber dann Du musst den Text parsen und programmtechnisch entsprechend umsetzen - das könnte aber eine gewaltige Aufgabe werden.

Ich kenne jetzt Deine Anforderungen nicht, daher kann nur soviel: Schreib Dir die nötigen Funktionen (z. B. setze Vorname und Nachname zusammen),
Delphi-Quellcode:
function ConcatGivenAndFamilyName : string;
begin
  Result := EditVorname.Text + ' ' + EditNachname.Text
end;
in der INI steht dann z. B. F1W=1 und irgendwo in Deinem Programm
Delphi-Quellcode:
case Ini.ReadInteger (Section, 'F1W', 0) of
  1 : WebBrowser1.(...).value := ConcatGivenAndFamilyName;
end
Ich hoffe es ist soweit verständlich. Vielleicht hilft' s.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 00:27
Nun ja, es gibt da auch noch die Möglichkeit von "Variablen" wie diese auch in der Delphi IDE benutzt werden.
Code:
F1W=$(vorname) $(nachname)
Den Text parsen, den Variablennamen bestimmen und dann durch den jeweiligen Wert ersetzen.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#4

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 00:31
Unabhängig des Problems, meiner Kenntnis nach ist das keine gute Idee:
Code:
[OpenPR]
URL=http://www.openpr.de/news/einstellen.html
Kann sein, dass es inzwischen anders ist, aber als ich das letzten mal die Länge einer Ini Zeile testete, war die etwa 1024 Zeichen lang. Internetadressen können gelegentlich länger sein.

Kann aber auch sein, dass die Beschränkung inzwischen weg ist.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 00:42
@Popov

Generell ist es eh nicht ratsam den Code so direkt ineinander zu weben.
Ein bischen mehr Abstraktion und das Problem von morgen (Beschränkung der Ini-Datei wird relevant) ist spätestens übermorgen gelöst (statt INI jetzt ClientDataSet) und der Rest bekommt das gar nicht mit, weil egal
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Erutan

Registriert seit: 16. Mär 2013
71 Beiträge
 
Delphi 7 Professional
 
#6

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 01:17
Boaahh...alles Nachtarbeiter

@Volker
Vielen Dank. Ja, ist verständlich bzw. habe ich kappiert. Falls es aber irgendeinen anderen Weg gibt, dann wäre das superklassetoll, denn es sind insgesamt 20 Felder mit jeweils 20 Werten. Ich müsste also 400 Werte ändern.

@Sir Rufo
Zitat:
Nun ja, es gibt da auch noch die Möglichkeit von "Variablen" wie diese auch in der Delphi IDE benutzt werden.
markieren
Code:
F1W=$(vorname) $(nachname)
Den Text parsen, den Variablennamen bestimmen und dann durch den jeweiligen Wert ersetzen.
Ich habe leider keine Idee wie ich das umsetzen soll. Kannst Du mir ein Beispiel geben?

Zitat:
Generell ist es eh nicht ratsam den Code so direkt ineinander zu weben.
Hihi, wenn Du wüßtest welche seltsamen Umwege ich manchmal mangels ausreichender Programmierkenntnisse gehen muss.

Die Werte zu den eizelnen Feldern gelangen z.B. in die Ini indem ich hinter einer ComboBox die Captions (unsichtbarer) Labels bei einem OnChange-Ereignis ändere. Also: Ich trage in ein Editfeld F1 ein, daß das entsprechende Formularfeld "name" heißt und wähle dahinter in einer ComboboxF1 aus, daß es sich um Vor- und Zunamen handelt. Dadurch wird die Caption eines dahinter liegenden Labels entsprechend geändert und dieser Wert wird dann in die Ini gespeichert.

...und ich bin total stolz, daß mir diese ösung eingefallen ist

Grüße
Hoger
Holger
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#7

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 02:29
Hallo,

ich habe leider immer noch ein Problem, Dein Problem zu verstehen.

So wie ich es sehe: Du möchtest verschiedene URLs automatisiert aufrufen, die möglichen Eingabefelder aus einer INI-Datei füttern und letztlich das Form abschießen - soweit korrekt?. Dabei sind die Daten eigentlich immer die selben oder? (Dein Name, Deine eMail-Adresse ändert sich nicht) nur die unterschiedlichen Anbieter verlangen mal mehr mal weniger Info/Daten (soweit korrekt?). Wenn dem so ist, dann die entsprechenden Daten in der INI ablegen (z. B. in der Section z. B. http://openpr.de/news/einstellen.html) und bei Bedarf entsprechend auslesen und den zugehörigen Controls (TEdit what so ever) zuweisen.
Code:
[http://openpr.de/news/einstellen.html]
F1N=name
F1W=Michel aus Lönneberga
F2N=email
F2W=michel@loenneberga.sw
Code:
[http://iregendeineandereseite.html]
F1N=somename
F1W=Michel Swenson
F2N=mailto
F2W=michel@loenneberga.sw
Soweit noch verständlich?

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Erutan

Registriert seit: 16. Mär 2013
71 Beiträge
 
Delphi 7 Professional
 
#8

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 02:49
Hi Volker,

ich verstehe was Du meinst.
Geht aber leider nicht.

Ich schreibe Pressemitteilungen nicht nur für mich, sondern auch noch für 2 Vereine. Die Kontaktdaten sind jeweils andere. Daher kann ich die nicht fest in einer Ini ablegen. Ganz zu schweigen von den Texten, die sich ja auch ändern.

Das Problem hast Du genau erwischt. Manche Presseverteiler wollen Vor- und Nachnamen separat, manche wollen beides in einem Feld, einige wollen PLZ und Ort separat, andere beides in einem Feld u.s.w.

Ich kann in der Ini also nur bestimmen was generell abgefrgt wird und die eigentlichen Informationen dann aus einem Formular ziehen.

Ich bin jetzt gerade dabei das Ganze auf Deine Methode umzustellen, die Du etwas weiter oben genannt hast. Finde ich gut. Das bißchen Arbeit tut ja nicht weh.

Allerdings habe ich da meine liebe Not.

Eine erste funktion sieht folgendermaßen aus:

Delphi-Quellcode:
function VorundZuname (EditVorname, EditNachname: TEdit) : string;
begin
  Result := EditVorname.Text + ' ' + EditNachname.Text;
end;
Das Problem entsteht beim Einfügen von VorundZuname.

Delphi-Quellcode:
procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
  var
  ini: TInifile;
  filename: String;

begin
filename := ExtractFilePath(ParamStr(0)) + 'einstellungen.ini';
ini := TIniFile.Create(filename);

  
   case Ini.ReadInteger (ComboBoxPresseverteiler.Text, 'F1W', 0) of
  1: if FillForm(WebBrowser1, Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1N', ''), VorundZuname) = False then ShowMessage('Fehler. Formular oder Formularfeld nicht gefunden');
    end ;

  Ini.Free;
  end;
Der Compiler sagt: Not enough actual parameters und setzt den Cursor hinter die Klammer nach VorundZuname.
Holger
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#9

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 03:03
Hallo,

Zitat:
Der Compiler sagt: Not enough actual parameters und setzt den Cursor hinter die Klammer nach VorundZuname
Na, das ist schon klar! Wenn Du die Funktion VorundZuname (EditVorname, EditNachname: TEdit) : string; deklarierst, dann sollten schon auch zwei Parameter übergeben werden, also ein:
if FillForm(WebBrowser1, Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1N', ''), VorundZuname ('Michel', 'Lönneberga')) then soltte es tun

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Erutan

Registriert seit: 16. Mär 2013
71 Beiträge
 
Delphi 7 Professional
 
#10

AW: Ini-Wert nicht als string einfügen

  Alt 1. Mär 2014, 03:18
Hmmm...mir fällt gerade auf, daß ich gar keine Funktionen brauche wenn ich die Werte in der Ini nur als Weiche verwende. Ich kann dann ja genauso gut auch die Editfelder selber eintragen.

Das habe ich jetzt mal versucht und es klappt.
Wenn F1W=1 nimm die Werte aus EditVorname plus EditNachname, wenn F1W=2 nimm nur den Wert aus EditVorname, wenn F1W=3 nimm nur den Wert aus EditNachname u.s.w.

Insofer wäre mein Problem gelöst. Ist nur viel Arbeit.

Vielen Dank und schöne Grüße
Holger
Holger
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:26 Uhr.
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