![]() |
Delphi-Version: 5
Ini-Wert nicht als string einfügen
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:
Die Edit-Felder EditVrname und EditNachname enthalten die entsprechenden Daten.
[OpenPR]
URL=http://www.openpr.de/news/einstellen.html F1N=name F1W=EditVorname.Text + ' ' + EditNachname.Text F2N=email F2W=EditEmail.Text Würde ich das nun (wie bisher) statisch machen, würde ich sagen:
Delphi-Quellcode:
Um das dynamisch zu machen, sage ich nun aber
Webbrowser1.Navigate('http://www.openpr.de/news/einstellen.html');
Delphi-Quellcode:
Das klappt auch einwandfrei.
Webbrowser1.Navigate(Ini.ReadString(ComboBoxPresseverteiler.Text, 'URL', ''));
Nun will ich die Felder (erst einmal nur das erste) ausfüllen lassen. Statisch würde ich bei Webbrowser1DocumentComplete sagen:
Delphi-Quellcode:
Nun will ich die Werte aber aus der Ini ziehen. Dazu habe ich folgendes geschrieben:
WebBrowser1.OleObject.document.forms.item(0).elements.item('name')).value := EditVorname.Text + ' ' + EditNachname.Text;
Delphi-Quellcode:
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.
WebBrowser1.OleObject.document.forms.item(0).elements.item(Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1N', '')).value := Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1W', '');
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.... |
AW: Ini-Wert nicht als string einfügen
Hallo,
Zitat:
Zitat:
Zitat:
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:
in der INI steht dann z. B. F1W=1 und irgendwo in Deinem Programm
function ConcatGivenAndFamilyName : string;
begin Result := EditVorname.Text + ' ' + EditNachname.Text end;
Delphi-Quellcode:
Ich hoffe es ist soweit verständlich. Vielleicht hilft' s.
case Ini.ReadInteger (Section, 'F1W', 0) of
1 : WebBrowser1.(...).value := ConcatGivenAndFamilyName; end Gruß |
AW: Ini-Wert nicht als string einfügen
Nun ja, es gibt da auch noch die Möglichkeit von "Variablen" wie diese auch in der Delphi IDE benutzt werden.
Code:
Den Text parsen, den Variablennamen bestimmen und dann durch den jeweiligen Wert ersetzen.
F1W=$(vorname) $(nachname)
|
AW: Ini-Wert nicht als string einfügen
Unabhängig des Problems, meiner Kenntnis nach ist das keine gute Idee:
Code:
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.
[OpenPR]
URL=http://www.openpr.de/news/einstellen.html Kann aber auch sein, dass die Beschränkung inzwischen weg ist. |
AW: Ini-Wert nicht als string einfügen
@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 |
AW: Ini-Wert nicht als string einfügen
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:
Zitat:
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 |
AW: Ini-Wert nicht als string einfügen
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. ![]()
Code:
[http://openpr.de/news/einstellen.html]
F1N=name F1W=Michel aus Lönneberga F2N=email F2W=michel@loenneberga.sw
Code:
Soweit noch verständlich?
[http://iregendeineandereseite.html]
F1N=somename F1W=Michel Swenson F2N=mailto F2W=michel@loenneberga.sw Gruß |
AW: Ini-Wert nicht als string einfügen
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:
Das Problem entsteht beim Einfügen von VorundZuname.
function VorundZuname (EditVorname, EditNachname: TEdit) : string;
begin Result := EditVorname.Text + ' ' + EditNachname.Text; end;
Delphi-Quellcode:
Der Compiler sagt: Not enough actual parameters und setzt den Cursor hinter die Klammer nach VorundZuname.
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; |
AW: Ini-Wert nicht als string einfügen
Hallo,
Zitat:
Delphi-Quellcode:
deklarierst, dann sollten schon auch zwei Parameter übergeben werden, also ein:
VorundZuname (EditVorname, EditNachname: TEdit) : string;
Delphi-Quellcode:
soltte es tun
if FillForm(WebBrowser1, Ini.ReadString(ComboBoxPresseverteiler.Text, 'F1N', ''), VorundZuname ('Michel', 'Lönneberga')) then
Gruß |
AW: Ini-Wert nicht als string einfügen
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:14 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 by Thomas Breitkreuz