Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Floating Point division by zero (https://www.delphipraxis.net/176185-floating-point-division-zero.html)

Erutan 18. Aug 2013 01:04

Delphi-Version: 5

Floating Point division by zero
 
Hallo,

so viel Spaß mir as Anfänger das Programmieren meines kleinen Pressemitteilungs-Helfers auch macht...manchmal könnte ich verzweifeln.

Ich baue mir gerade ein Helferlein, das mir die lästige Arbeit mit Pressemitteilungen etwas erleichtern soll. Es ist im Kern ein automatisches Ausfüllprogramm, basierend auf einem Code, den ich mal hier gefunden habe:
http://www.swissdelphicenter.ch/de/showcode.php?id=262

Das klappt eigentlich auch ganz gut...zumindest wenn ich meine eigenen Webseiten oder die, im Code angegebene Seite vom swissdelphicenter ansteuere bekomme ich laufend Abstürze.
In der Entwicklungsumgebung selber lautet die Fehlermeldung: Project xyz raised exception class EOleError with Message 'Methode 'Name' not supported by automation object. Process stopped. Use Step or Run to continue.

Der Debugger stoppt bei folgendem Code:
Delphi-Quellcode:
if FormItem.Item(j).Name = FieldName then
Aber wie gesagt, das macht er niemals bei der Seite vom Swissdelphicenter oder meinen Testseiten. Ich vermute deshalb, daß es etwas mit dem Verhalten der angesteuerten Webseiten zu tun hat. Möglicherweise mit diversen JavaScript-Fehlermeldungen, ich ich durch Silent := true einfach abgeschaltet habe.

Wenn ich das Programm direkt starte, also nicht über die IDE, dann läuft es ein wenig stabiler. Wenn es dann aber doch abstürzt, dann produziert es die Fehlermeldung: Floatng Point division by zero.

Ich kann mit beiden Fehlermeldungen nicht sehr viel anfangen und verstehe nur, daß es sich um einen Laufzeitfehler handelt, der durch die Methode "Name" ausgelöst wird.

Wäre klasse wenn jemandem etwas dazu einfallen könnte.

Viele Grüße
Erutan

Erutan 18. Aug 2013 01:19

AW: Floating Point division by zero
 
Oh, ich sehe gerade, daß sich da ein Fehler eingeschlichen hat. Das Forum glaubt, ich würde noch mit Delphi 5 arbeiten. Nein, ich habe mich mittlerweile bis zu Delphi 7 hochgearbeitet :lol: Hab's inzwischen geändert.

Volker Z. 18. Aug 2013 01:43

AW: Floating Point division by zero
 
Hallo,

Zitat:

Das klappt eigentlich auch ganz gut...
Scheint nicht so zu sein.

Zitat:

zumindest wenn ich meine eigenen Webseiten oder die, im Code angegebene Seite vom swissdelphicenter ansteuere bekomme ich laufend Abstürze.
Zitat:

Aber wie gesagt, das macht er niemals bei der Seite vom Swissdelphicenter oder meinen Testseiten.
So, jetzt bin ich leicht verwirrt (Absturz [ ] Ja, [ ] Nein).

Vielleicht gibst Du etwas Code oder (besser beides) eine URL dazu, die die Exception auslöst. Sonst können wir noch 'ne ganze Weile im Nebel stochern.

Gruß

Bjoerk 18. Aug 2013 08:12

AW: Floating Point division by zero
 
Würd' ich auch gern mal wissen, was da Delphi so macht? Scheint irgendwie mit dem Variant zusammenzuhängen.

Zum Beispiel wird das kompiliert?? :shock:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  A: Variant;
begin
  A.Nonsens.Tralala.SomeItem(119).SomeBlödsinn := 'Test';
end;

mkinzler 18. Aug 2013 08:26

AW: Floating Point division by zero
 
Ich bin mir nicht ganz sicher, ob er sich am ö stort, aber grundsätzlich sollte die Zeile komplilieren

Uwe Raabe 18. Aug 2013 09:10

AW: Floating Point division by zero
 
Zitat:

Zitat von mkinzler (Beitrag 1225221)
Ich bin mir nicht ganz sicher, ob er sich am ö stort, aber grundsätzlich sollte die Zeile komplilieren

Unter D2009+ würde die Zeile auf jeden Fall kompilieren (da kann man zwar Umlaute in Identifiern verwenden - sollte es aber nicht!). Variants werden ja erst zur Laufzeit aufgelöst und da nimmt der Compiler ebenn alles, was syntaktisch erlaubt ist.

Wenn es dann aber beim Programmlauf kein A.Nonsens oder eines der folgenden Unterelemente gibt, wird ein Fehler gemeldet.

jaenicke 18. Aug 2013 09:50

AW: Floating Point division by zero
 
Zitat:

Zitat von mkinzler (Beitrag 1225221)
Ich bin mir nicht ganz sicher, ob er sich am ö stort, aber grundsätzlich sollte die Zeile komplilieren

Unter aktuellen Delphiversionen kompiliert auch das ohne Probleme:
Delphi-Quellcode:
var
  鈀灞渤: Variant;
begin
  鈀灞渤.碑背椑北(22);
Zitat:

Zitat von Erutan (Beitrag 1225215)
In der Entwicklungsumgebung selber lautet die Fehlermeldung: Project xyz raised exception class EOleError with Message 'Methode 'Name' not supported by automation object.

Ich bin mir nicht sicher, ob alle Elemente die Eigenschaft Name haben...
tagname sollte aber immer verfügbar sein. Damit kannst du dann erst einmal schauen, ob das Tag passt und dann erst den Namen prüfen. Das sollte immer funktionieren.

sx2008 18. Aug 2013 10:12

AW: Floating Point division by zero
 
In einem Variant kann auch ein IDispatch - Interface stecken.
Daher ist es ganz normal, dass der Compiler keine weiteren Prüfungen mehr vornimmt.

Ein IDispatch Interface funktioniert so:
zur Laufzeit fragt die Anwendung nach der Nummer der Methode / Property.
Falls es die Methode / Property gibt wird in einem zweiten Schritt die Methode aufgerufen.
Dies wird auch "late bindung" genannt, weil erst zur Laufzeit geprüft wird ob es die Methoden überhaupt gibt.

Bjoerk 18. Aug 2013 16:16

AW: Floating Point division by zero
 
Wie isses denn so?

Delphi-Quellcode:
procedure TForm1.FillForm(const FieldName, Value: string);
var
  I, J: Integer;
  Item, SubItem : Variant;
begin
  try
    for I := 0 to WebBrowser1.OleObject.Document.Forms.Length - 1 do
    begin
      Item := WebBrowser1.OleObject.Document.Forms.Item(I);
      for J := 0 to Item.Length - 1 do
      begin
        SubItem := Item.Item(J);
        if SubItem.Name = FieldName then
          SubItem.Value := Value;
      end;
    end;
  except
    on E: Exception do
      ShowMessage('Fehler vom Typ: ' + E.ClassName + ', Meldung: ' + E.Message);
  end;
end;

Erutan 18. Aug 2013 23:57

AW: Floating Point division by zero
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

vielen Dank, vor allen Dingen an Bjoerk. Nein, das funktioniert leider auch nicht, d.h. es erzeugt die gleiche Fehlermeldung und das Programm stürzt so ab, daß ich erst die ganze IDE beenden und neu starten muß.

Zitat:

So, jetzt bin ich leicht verwirrt (Absturz [ ] Ja, [ ] Nein).
Okay. Ich sagte ja, daß das Programm nur beim Aufruf einiger Seiten abstürzt während es beim Aufruf anderer Seiten stabil läuft.

Es stürzt beispielsweise beim Aufruf der Seite http://www.swissdelphicenter.ch/en/addtip.php (um dort probehalber das Feld bei Homepage ausfülen zu lassen) niemals ab; ist zumindest bisher noch nie abgestürzt.

Dagegen stürzt es beim Aufruf der Seite http://openpr.de/news/einstellen.html manchmal und beim Aufruf der Seite http://www.fair-news.de/pr_neu_2.php bzw. http://www.firmenpresse.de/pressemit...entlichen.html sehr häufig ab. Die letzteren Seiten biegen die Anfrage allerdings auf eine Login-Seite um. Das spielt allerdings keine Rolle. Auch wenn ich direkt auf die Loginseite verlinke, stüzt das Programm hin und wieder ab.

Etwas was wirklich seltsam ist:
Gehe ich zuerst auf http://www.swissdelphicenter.ch/en/addtip.php und erst dann auf die anderen Seiten, reduzieren sich die Abstürze deutlich.

Zitat:

Vielleicht gibst Du etwas Code oder (besser beides) eine URL dazu, die die Exception auslöst. Sonst können wir noch 'ne ganze Weile im Nebel stochern.
Gern. Ich füge hier einfach mal den gesamten Sourcecode ein, da ich mir nicht sicher bin, ob das Problem wirklich dort entsteht wo der Debugger es mir anzeigt. Möglich, daß einfach nur eine Einstellung falsch gewählt ist?...

Also, hier der gesamte Sourcecode:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, OleCtrls, SHDocVw, StdCtrls, ComCtrls, IniFiles, Buttons;

type
  TForm1 = class(TForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    Button1: TButton;
    WebBrowser1: TWebBrowser;
    Label1: TLabel;
    Button2: TButton;
    GroupBox3: TGroupBox;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    EditName: TEdit;
    EditEmail: TEdit;
    EditTelefon: TEdit;
    EditAgentur: TEdit;
    EditFirma: TEdit;
    MemoKontaktdaten: TMemo;
    MemoPortrait: TMemo;
    EditUsername: TEdit;
    EditPassword: TEdit;
    Button16: TButton;
    Button17: TButton;
    Button18: TButton;
    Button19: TButton;
    GroupBox4: TGroupBox;
    EditTitel: TEdit;
    Label11: TLabel;
    Label12: TLabel;
    EditUntertitel: TEdit;
    Label13: TLabel;
    MemoTeaser: TMemo;
    Label14: TLabel;
    EditWebseite: TEdit;
    Label15: TLabel;
    MemoHaupttext: TMemo;
    GroupBox5: TGroupBox;
    Label16: TLabel;
    EditKey1: TEdit;
    Label17: TLabel;
    EditKey2: TEdit;
    Label18: TLabel;
    EditKey3: TEdit;
    Label19: TLabel;
    EditKey4: TEdit;
    Button23: TButton;
    Button24: TButton;
    MemoKeys: TMemo;
    Button26: TButton;
    Button27: TButton;
    Button28: TButton;
    Button29: TButton;
    Button30: TButton;
    Button31: TButton;
    Button32: TButton;
    Button33: TButton;
    Button34: TButton;
    OpenDialogAlles: TOpenDialog;
    SaveDialogAlles: TSaveDialog;
    OpenDialogEmail: TOpenDialog;
    SaveDialogEmail: TSaveDialog;
    ButtonDatenSpeichern: TButton;
    ButtonDatenLaden: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    EditVeroeffentlichungOrt: TEdit;
    Label20: TLabel;
    ComboBoxKategorie: TComboBox;
    LabelKategorie: TLabel;
    EditBild: TEdit;
    SpeedButton1: TSpeedButton;
    Label21: TLabel;
    EditBildunterschrift: TEdit;
    Label22: TLabel;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    GroupBox6: TGroupBox;
    Label23: TLabel;
    EditOpenPRUser: TEdit;
    EditOpenPRPass: TEdit;
    EditPRInsideUser: TEdit;
    EditPRInsidePass: TEdit;
    Label24: TLabel;
    Button12: TButton;
    Button13: TButton;
    Label25: TLabel;
    EditPremiumpresseUser: TEdit;
    EditPremiumpressePass: TEdit;
    Label26: TLabel;
    EditFairNewsUser: TEdit;
    EditFairNewsPass: TEdit;
    EditOffenesPPUser: TEdit;
    EditOffenesPPPass: TEdit;
    Label27: TLabel;
    Label28: TLabel;
    Label29: TLabel;
    Label30: TLabel;
    Label31: TLabel;
    Label32: TLabel;
    Label33: TLabel;
    EditNachrichtenNetUser: TEdit;
    EditNachrichtenNetPass: TEdit;
    EditFirmenpresseUser: TEdit;
    EditFirmenpressePass: TEdit;
    EditLivePRUser: TEdit;
    EditLivePRPass: TEdit;
    EditPresseINUser: TEdit;
    EditPresseINPass: TEdit;
    EditPresseWSUser: TEdit;
    EditPresseWSPass: TEdit;
    EditInarUser: TEdit;
    EditInarPass: TEdit;
    Button14: TButton;
    Button15: TButton;
    Button20: TButton;
    Button21: TButton;
    Button22: TButton;
    Button35: TButton;
    Button36: TButton;
    Button37: TButton;
    Button38: TButton;
    Button39: TButton;
    Button40: TButton;
    Label34: TLabel;
    EditnordPRUser: TEdit;
    EditnordPRPass: TEdit;
    Button41: TButton;
    Button42: TButton;
    Button43: TButton;
    Label35: TLabel;
    EditDailyNetUser: TEdit;
    EditDailyNetPass: TEdit;
    Button44: TButton;
    Button45: TButton;
    Label36: TLabel;
    EditPTextUser: TEdit;
    EditPTextPass: TEdit;
    Button46: TButton;
    Button47: TButton;
    EditOnlinepresseinfoUser: TEdit;
    EditOnlinepresseinfoPass: TEdit;
    Label37: TLabel;
    Button48: TButton;
    Button49: TButton;
    Label38: TLabel;
    EditOpenbroadcastUser: TEdit;
    EditOpenbroadcastPass: TEdit;
    Button50: TButton;
    Label39: TLabel;
    Label40: TLabel;
    StaticText1: TStaticText;
    Button51: TButton;
    EditFreiePMUser: TEdit;
    EditFreiePMPass: TEdit;
    Label41: TLabel;
    Button52: TButton;
    Label42: TLabel;
    Label43: TLabel;
    EditVorname: TEdit;
    EditPLZ: TEdit;
    EditOrt: TEdit;
    EditStrasse: TEdit;
    Label44: TLabel;
    EditNr: TEdit;
    Label45: TLabel;
    Label46: TLabel;
    procedure WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    procedure WebBrowser1ProgressChange(Sender: TObject; Progress,
      ProgressMax: Integer);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button34Click(Sender: TObject);
    procedure ButtonDatenSpeichernClick(Sender: TObject);
    procedure ButtonDatenLadenClick(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button39Click(Sender: TObject);
    procedure Button40Click(Sender: TObject);
    procedure Button42Click(Sender: TObject);
    procedure Button43Click(Sender: TObject);
    procedure Button45Click(Sender: TObject);
    procedure Button49Click(Sender: TObject);
    procedure Button47Click(Sender: TObject);
    procedure Button51Click(Sender: TObject);
    procedure MemoKontaktdatenClick(Sender: TObject);
    procedure MemoKeysClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ini: TIniFile;
  PWert: Integer;

implementation

{$R *.dfm}

function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): Boolean;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := False;
  //no form on document
  if WebBrowser.OleObject.Document.all.tags('FORM').Length = 0 then
  begin
    Exit;
  end;
  //count forms on document
  for I := 0 to WebBrowser.OleObject.Document.forms.Length - 1 do
  begin
    FormItem := WebBrowser.OleObject.Document.forms.Item(I);
    for j := 0 to FormItem.Length - 1 do
    begin
      try
        //when the fieldname is found, try to fill out
        if FormItem.Item(j).Name = FieldName then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
      except
        Exit;
      end;
    end;
  end;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
  const pDisp: IDispatch; var URL: OleVariant);
begin
// Ab hier die Ausfüllfelder eintragen

// Ausfüllfelder für Swissdelphicenter
  FillForm(WebBrowser1, 'homepage', 'http://www.swissdelphicenter.ch') ;
  FillForm(WebBrowser1, 'email', EditEmail.Text);
  FillForm(WebBrowser1, 'headline', EditTitel.Text);
  FillForm(WebBrowser1, 'name', EditVorname.Text + ' ' + EditName.Text) ;
  FillForm(WebBrowser1, 'agency', EditAgentur.Text) ;
  FillForm(WebBrowser1, 'tel', EditTelefon.Text) ;
  FillForm(WebBrowser1, 'firma', EditFirma.Text) ;
  FillForm(WebBrowser1, 'titel', EditTitel.Text) ;
  FillForm(WebBrowser1, 'text', MemoHaupttext.Text) ;
  FillForm(WebBrowser1, 'ccontact', MemoKontaktdaten.Text) ;
  FillForm(WebBrowser1, 'portrait', MemoPortrait.Text) ;
  FillForm(WebBrowser1, 'shorttext', MemoTeaser.Text);
  FillForm(WebBrowser1, 'maintext', MemoHaupttext.Text);
  FillForm(WebBrowser1, 'company', EditFirma.Text) ;
  FillForm(WebBrowser1, 'adress', MemoKontaktdaten.Text) ;
  FillForm(WebBrowser1, 'web', EditWebseite.Text) ;
  FillForm(WebBrowser1, 'person', EditVorname.Text + ' ' + EditName.Text) ; //PRInside
  FillForm(WebBrowser1, 'position', 'Pressesprecher(in)') ;    //PRInsie
  FillForm(WebBrowser1, 'ftitle', EditTitel.Text) ;     //Premiumpresse
  FillForm(WebBrowser1, 'fsubtitle', EditUntertitel.Text) ;    //Premiumpresse
  FillForm(WebBrowser1, 'fcity', EditVeroeffentlichungOrt.Text) ;    //Premiumpresse
  FillForm(WebBrowser1, 'feditor1', MemoHaupttext.Text) ;       //Premiumpresse
  FillForm(WebBrowser1, 'fuserkw1', EditKey1.Text) ;             //Pemiumpresse
  FillForm(WebBrowser1, 'fuserkw2', EditKey2.Text) ;            //Premiumpresse
  FillForm(WebBrowser1, 'fuserkw3', EditKey3.Text) ;             //Premiumpresse
  FillForm(WebBrowser1, 'link_zur_homepage', EditWebseite.Text) ;

  //FillForm(WebBrowser1, 'passwort', EditPassword.Text) ;

     FillForm(WebBrowser1, 'firma', EditFirma.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'vorname', EditVorname.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'nachname', EditName.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'stadt', EditOrt.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'email', EditEmail.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'telefon', EditTelefon.Text) ;               //Offenes Presseportal
     FillForm(WebBrowser1, 'url', EditWebseite.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'titel', EditTitel.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'text', MemoHaupttext.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'firmenportrait', MemoPortrait.Text) ;                   //Offenes Presseportal
     FillForm(WebBrowser1, 'bild_titel', EditBildunterschrift.Text) ;



  FillForm(WebBrowser1, 'titel', EditTitel.Text) ;
  FillForm(WebBrowser1, 'subtitle', EditUntertitel.Text) ;
  FillForm(WebBrowser1, 'hauptinhalt', MemoHaupttext.Text) ;
  FillForm(WebBrowser1, 'pressekontakt', MemoKontaktdaten.Text) ;
  FillForm(WebBrowser1, 'profil', MemoPortrait.Text) ;
  FillForm(WebBrowser1, 'edit[titel]', EditTitel.Text) ;
  FillForm(WebBrowser1, 'edit[taxonomy][tags][2]', MemoKeys.Text) ;
  FillForm(WebBrowser1, 'edit[body]', MemoHaupttext.Text) ;
  FillForm(WebBrowser1, 'post_titel', EditTitel.Text) ;
  FillForm(WebBrowser1, 'content', MemoHaupttext.Text) ;

  //Firmenpresse


  //Zugangsdaten


  if PWert=4 then begin //Starte Weiche für Premiumpresse
     FillForm(WebBrowser1, 'fusername', EditPremiumpresseUser.Text) ;         //Premiumpresse
     FillForm(WebBrowser1, 'fpassword', EditPremiumpressePass.Text) ;         //Premiumpresse
  end  //Ende Weiche für Premiumpresse
  else
  if PWert=5 then begin //Starte Weiche für Fair News
     FillForm(WebBrowser1, 'edit[name]', EditUsername.Text) ;
     FillForm(WebBrowser1, 'edit[pass]', EditPassword.Text) ;
  end
  else
  if PWert=3 then begin //Starte Weiche für PRInsie
     FillForm(WebBrowser1, 'password', EditPRInsidePass.Text) ;
  end
  else
  if PWert=7 then begin //Nachrichten.net
     FillForm(WebBrowser1, 'password', EditNachrichtenNetPass.Text) ;
     FillForm(WebBrowser1, 'username', EditNachrichtenNetUser.Text) ;
  end
  else
  if PWert=8 then begin //Firmenpresse
     FillForm(WebBrowser1, 'uname', EditFirmenpresseUser.Text) ;
     FillForm(WebBrowser1, 'pass', EditFirmenpressePass.Text) ;

   end;


end;

procedure TForm1.WebBrowser1ProgressChange(Sender: TObject; Progress,
  ProgressMax: Integer);
begin
  if ProgressMax = 0 then
  begin
    label1.Caption := '';
    Exit;
  end;
  try
    if (Progress <> -1) and (Progress <= ProgressMax) then
      label1.Caption := IntToStr((Progress * 100) div ProgressMax) + '% loaded...'
    else
      label1.Caption := '';
  except
    on EDivByZero do Exit;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Webbrowser1.Navigate('http://www.swissdelphicenter.ch/en/addtip.php');
 PWert := 1;
  // Show the Titel of the currently active Webpage in the titlebar
  // Den Titel der aktuellen Webseite in der Titeleiste anzeigen
//  Caption := Webbrowser1.OleObject.Document.Title;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  PWert := 2;
  Webbrowser1.Navigate('http://openpr.de/news/einstellen.html');
end;

procedure TForm1.Button34Click(Sender: TObject);
begin
  PWert := 3;
  Webbrowser1.Navigate('http://www.pr-inside.com/de/release_new.htm');
end;

procedure TForm1.ButtonDatenSpeichernClick(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.Create('./userdat.ini');
  With ini do begin
  // Wenn das Formular geschlossen wird, werden diese Werte in die userdat.ini gespeichert
  WriteString('User1','Name',EditName.Text);
  WriteString('User1','Vorname',EditVorname.Text);
  WriteString('User1','Email',EditEmail.Text);
  WriteString('User1','Telefon',EditTelefon.Text);
  WriteString('User1','Agentur',EditAgentur.Text);
  WriteString('User1','Archiv',EditFirma.Text);
  WriteString('User1','Webseite',EditWebseite.Text);
  WriteString('User1','Username',EditUsername.Text);
  WriteString('User1','Password',EditPassword.Text);
  WriteString('User1','Strasse',EditStrasse.Text);
  WriteString('User1','Nr',EditNr.Text);
  WriteString('User1','PLZ',EditPLZ.Text);
  WriteString('User1','Ort',EditOrt.Text);
  WriteString('User1','OpenPRUser',EditOpenPRUser.Text);
  WriteString('User1','OpenPRPass',EditOpenPRPass.Text);
  WriteString('User1','PRInsideUser',EditPRInsideUser.Text);
  WriteString('User1','PRInsidePass',EditPRInsidePass.Text);
  WriteString('User1','PremiumpresseUser',EditPremiumpresseUser.Text);
  WriteString('User1','PremiumpressePass',EditPremiumpressePass.Text);
  WriteString('User1','FairNewsUser',EditFairNewsUser.Text);
  WriteString('User1','FairNewsPass',EditFairNewsPass.Text);
  WriteString('User1','OffenesPPUser',EditOffenesPPUser.Text);
  WriteString('User1','OffenesPPPass',EditOffenesPPPass.Text);
  WriteString('User1','NachrichtenNetUser',EditNachrichtenNetUser.Text);
  WriteString('User1','NachrichtenNetPass',EditNachrichtenNetPass.Text);
  WriteString('User1','FirmenpresseUser',EditFirmenpresseUser.Text);
  WriteString('User1','FirmenpressePass',EditFirmenpressePass.Text);
  WriteString('User1','LivePRUser',EditLivePRUser.Text);
  WriteString('User1','LivePRPass',EditLivePRPass.Text);
  WriteString('User1','PresseINUser',EditPresseINUser.Text);
  WriteString('User1','PresseINPass',EditPresseINPass.Text);
  WriteString('User1','PresseWSUser',EditPresseWSUser.Text);
  WriteString('User1','PresseWSPass',EditPresseWSPass.Text);
  WriteString('User1','InarUser',EditInarUser.Text);
  WriteString('User1','InarPass',EditInarPass.Text);
  WriteString('User1','nordPRUser',EditnordPRUser.Text);
  WriteString('User1','nordPRPass',EditnordPRPass.Text);
  WriteString('User1','DailyNetUser',EditDailyNetUser.Text);
  WriteString('User1','DailyNetPass',EditDailyNetPass.Text);
  WriteString('User1','PTextUser',EditPTextUser.Text);
  WriteString('User1','PTextPass',EditPTextPass.Text);
  WriteString('User1','OnlinepresseinfoUser',EditOnlinepresseinfoUser.Text);
  WriteString('User1','OnlinepresseinfoPass',EditOnlinepresseinfoPass.Text);
  WriteString('User1','OpenbroadcastUser',EditOpenbroadcastUser.Text);
  WriteString('User1','OpenbroadcastPass',EditOpenbroadcastPass.Text);
  WriteString('User1','FreiePMUser',EditFreiePMUser.Text);
  WriteString('User1','FreiePMPass',EditFreiePMPass.Text);

  //WriteLn('User1','Kontaktdaten',Memo1.Lines);
  //Wenn die Anwendung geschlossen wird, werden Fensterposition und Größe in die Ini geschrieben
  //  WriteInteger('Position','Links',Left);
  //  WriteInteger('Position','Oben',Top);
 //   WriteInteger('Position','Rechts',Width);
 //   WriteInteger('Position','Unten',Height);
end;
  ini.Free

end;

procedure TForm1.ButtonDatenLadenClick(Sender: TObject);
   var
    ini: TIniFile;
begin
    ini:=TIniFile.Create('./userdat.ini');
    with ini do begin
    // Wenn die Anwendung gestartet wird, werden diese Daten aus der userdat.ini geschrieben
    EditName.Text:=ReadString ('User1','Name','');
    EditVorname.Text:=ReadString ('User1','Vorname','');
    EditEmail.Text:=ReadString ('User1','Email','');
    EditTelefon.Text:=ReadString ('User1','Telefon','');
    EditAgentur.Text:=ReadString ('User1','Agentur','');
    EditFirma.Text:=ReadString ('User1','Archiv','');
    EditWebseite.Text:=ReadString ('User1','Webseite','');
    EditUsername.Text:=ReadString ('User1','Username','');
    EditPassword.Text:=ReadString ('User1','Password','');
    EditStrasse.Text:=ReadString ('User1','Strasse','');
    EditNr.Text:=ReadString ('User1','Nr','');
    EditPLZ.Text:=ReadString ('User1','PLZ','');
    EditOrt.Text:=ReadString ('User1','Ort','');
    EditOpenPRUser.Text:=ReadString ('User1','OpenPRUser','');
    EditOpenPRPass.Text:=ReadString ('User1','OpenPRPass','');
    EditPRInsideUser.Text:=ReadString ('User1','PRInsideUser','');
    EditPRInsidePass.Text:=ReadString ('User1','PRInsidePass','');
    EditPremiumpresseUser.Text:=ReadString ('User1','PremiumpresseUser','');
    EditPremiumpressePass.Text:=ReadString ('User1','PremiumpressePass','');
    EditFairNewsUser.Text:=ReadString ('User1','FairNewsUser','');
    EditFairNewsPass.Text:=ReadString ('User1','EditFairNewsPass','');
    EditOffenesPPUser.Text:=ReadString ('User1','OffenesPPUser','');
    EditOffenesPPPass.Text:=ReadString ('User1','OffenesPPPass','');
    EditNachrichtenNetUser.Text:=ReadString ('User1','NachrichtenNetUser','');
    EditNachrichtenNetPass.Text:=ReadString ('User1','NachrichtenNetPass','');
    EditFirmenpresseUser.Text:=ReadString ('User1','FirmenpresseUser','');
    EditFirmenpressePass.Text:=ReadString ('User1','FirmenpressePass','');
    EditLivePRUser.Text:=ReadString ('User1','LivePRUser','');
    EditLivePRPass.Text:=ReadString ('User1','LivePRPass','');
    EditPresseINUser.Text:=ReadString ('User1','PresseINUser','');
    EditPresseINPass.Text:=ReadString ('User1','PresseINPass','');
    EditPresseWSUser.Text:=ReadString ('User1','PresseWSUser','');
    EditPresseWSPass.Text:=ReadString ('User1','PresseWSPass','');
    EditInarUser.Text:=ReadString ('User1','InarUser','');
    EditInarPass.Text:=ReadString ('User1','InarPass','');
    EditnordPRUser.Text:=ReadString ('User1','nordPRUser','');
    EditnordPRPass.Text:=ReadString ('User1','nordPRPass','');
    EditDailyNetUser.Text:=ReadString ('User1','DailyNetUser','');
    EditDailyNetPass.Text:=ReadString ('User1','DailyNetPass','');
    EditPTextUser.Text:=ReadString ('User1','PTextUser','');
    EditPTextPass.Text:=ReadString ('User1','PTextPass','');
    EditOnlinepresseinfoUser.Text:=ReadString ('User1','OnlinepresseinfoUser','');
    EditOnlinepresseinfoPass.Text:=ReadString ('User1','OnlinepresseinfoPass','');
    EditOpenbroadcastUser.Text:=ReadString ('User1','OpenbroadcastUser','');
    EditOpenbroadcastPass.Text:=ReadString ('User1','OpenbroadcastPass','');
    EditFreiePMUser.Text:=ReadString ('User1','FreiePMUser','');
    EditFreiePMPass.Text:=ReadString ('User1','FreiePMPass','');



   // Memo1.Lines:=ReadString ('User1','Kontaktdaten','');

      //Fensterposition vom letzten Programmende verwenden
 //   Left := ReadInteger('Position','Links',Left);
 //   Top := ReadInteger('Position','Oben',Top);
 //   Width := ReadInteger('Position','Rechts',Width);
 //   Height := ReadInteger('Position','Unten',Height);
    end;
    ini.Free;
end;


procedure TForm1.Button16Click(Sender: TObject);
var
Datei: TextFile;
//text_datei: TextFile;
text_zeilen: string;
zeilen_num: Integer;
begin
if SaveDialogAlles.Execute then
   // MemoKontaktdaten.Lines.SaveToFile(SaveDialogAlles.FileName);
  //  MemoPortrait.Lines.SaveToFile(SaveDialogAlles.FileName);

  AssignFile(Datei, SaveDialogAlles.FileName);
  Rewrite(Datei);
  WriteLn(Datei, EditName.Text);
  WriteLn(Datei,EditEmail.Text);
  WriteLn(Datei,EditTelefon.Text);
  WriteLn(Datei,EditAgentur.Text);
  WriteLn(Datei,EditFirma.Text);
  WriteLn(Datei,EditWebseite.Text);
  WriteLn(Datei,EditUsername.Text);
  WriteLn(Datei,EditPassword.Text);
 // WriteLn(Datei,MemoKontaktdaten.Lines.DelimitedText);
//  WriteLn(Datei,MemoPortrait.Lines.DelimitedText);
  //--------------Test----------------------
   for zeilen_num := 0 to MemoKontaktdaten.Lines.Count -1 do
   begin
   //liest geänderte Zeilen in Variable
   text_zeilen := {IntToStr(zeilen_num) +} MemoKontaktdaten.Lines[zeilen_num];

   //schreibt in Datei Zeile für Zeile
   WriteLn(datei,text_zeilen);
   end; //for end


   for zeilen_num := 0 to MemoPortrait.Lines.Count -1 do
   begin
   //liest geänderte Zeilen in Variable
   text_zeilen := {IntToStr(zeilen_num) +} MemoPortrait.Lines[zeilen_num];

   //schreibt in Datei Zeile für Zeile
   WriteLn(datei,text_zeilen);
   end; //for end
  //------------Test Ende---------------------


  CloseFile(Datei);
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  PWert := 7;
  Webbrowser1.Navigate('http://www.nachrichten.net/news/create');
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
   PWert := 8;
   Webbrowser1.Navigate('http://www.firmenpresse.de/pressemitteilung-veroeffentlichen.html');

end;

procedure TForm1.Button8Click(Sender: TObject);
begin
   PWert := 9;
   Webbrowser1.Navigate('http://www.live-pr.com/neue-pressemeldung.htm');
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
   PWert := 10;
   Webbrowser1.Navigate('http://www.pressemitteilung.in/node/add/pressemeldung');
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
   PWert := 11;
   Webbrowser1.Navigate('http://pressemitteilung.ws/node/add/story');
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
   PWert := 12;
   Webbrowser1.Navigate('http://www.inar.de/wp-admin/post-new.php');
end;

procedure TForm1.Button39Click(Sender: TObject);
begin
   PWert := 13;
   Webbrowser1.Navigate('http://www.presse-kostenlos.de/press.exe?new=true');
end;

procedure TForm1.Button40Click(Sender: TObject);
begin
  PWert := 14;
  Webbrowser1.Navigate('http://www.nordpr.de/form/presseartikel-kostenlos-einstellen.html');
end;

procedure TForm1.Button42Click(Sender: TObject);
begin
   PWert := 15;
   Webbrowser1.Navigate('http://www.pressekat.de/index.php?_B=pm-erstellen-neul');
end;

procedure TForm1.Button43Click(Sender: TObject);
begin
  PWert := 16;
  Webbrowser1.Navigate('http://www.dailynet.de/anmeldung_pm.php');
end;

procedure TForm1.Button45Click(Sender: TObject);
begin
  PWert := 17;
  Webbrowser1.Navigate('http://www.ptext.de/user');
end;

procedure TForm1.Button49Click(Sender: TObject);
begin
  PWert := 19;
  Webbrowser1.Navigate('http://www.openbroadcast.de/publish.html');
end;

procedure TForm1.Button47Click(Sender: TObject);
begin
    PWert := 18;
    Webbrowser1.Navigate('http://www.onlinepresse.info/user/');
end;

procedure TForm1.Button51Click(Sender: TObject);
begin
    PWert := 20;
    Webbrowser1.Navigate('http://www.freie-pressemitteilungen.de/modules.php?name=Your_Account');
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    PWert := 4;
    Webbrowser1.Navigate('http://www.premiumpresse.de/seite/pressemitteilung-erstellen/');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
    PWert := 5;
    Webbrowser1.Navigate('http://www.fair-news.de/pr_neu_2.php');
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
   PWert := 6;
   Webbrowser1.Navigate('http://www.offenes-presseportal.de/artikel-schreiben.htm');
end;

procedure TForm1.MemoKontaktdatenClick(Sender: TObject);
begin
 MemoKontaktdaten.Text := EditVorname.Text + ' ' + EditName.Text + #13#10 + EditEmail.Text
 + #13#10 + EditStrasse.Text + ' ' + EditNr.Text + #13#10 + EditPLZ.Text
 + ' ' + EditOrt.Text + #13#10 + 'Telefon: ' + EditTelefon.Text ;
end;

procedure TForm1.MemoKeysClick(Sender: TObject);
begin
 MemoKeys.Text := EditKey1.Text + ', ' + EditKey2.Text + ', ' + EditKey3.Text + ', ' + EditKey4.Text ;
end;

end.
Für den Fall, daß es jemand selber ausprobieren will, habe ich die kompilierte Datei hochgeladen.

Grüße
Erutan

Thom 19. Aug 2013 00:45

AW: Floating Point division by zero
 
Ein Problem ist, daß die Eigenschaft "Name" nicht immer vorhanden ist. Aber dazu wurde schon einiges gesagt.
Das andere Problem liegt in den Exceptions, die die JavaScript-Engine des Internet Explorers produziert. Hier hilft nur das Abschalten der vom Prozessor erzeugten Exceptions. Das hier sollte Dir weiterhelfen.

nahpets 19. Aug 2013 01:15

AW: Floating Point division by zero
 
PWert ist nicht zwingend mit einem sinnvollen Wert befüllt.

Bei Button1 wird PWert erst nach dem Webbrowser1.Navigate befüllt, hat also vorher ggfls. einen undefinierten Wert (irgendein Integer).

Gib hier bitte mal FieldName mit aus, damit man weiß, bei welchem Feld der Fehler auftritt.
Delphi-Quellcode:
  except
    on E: Exception do
      ShowMessage('Fehler vom Typ: ' + E.ClassName + ', Meldung: ' + E.Message + ' , Feld: ' + FieldName);
  end;
Mir ist der Fehler nur bei Offenes-Presseportal.de ca. 46 mal um die Ohren gehauen worden. Auf der Seite scheinen alle Eingabefelder... innerhalb von FieldSets zu stehen. Es kann sein, dass das FillForm dafür nicht geeignet ist, da die Eingabefelder nicht direkt im Form liegen, sondern in FieldSets.

Die Seite von Fair-News.de enthält mehrere Formulare. Welches dieser Formulare erwischst Du denn mit Deinem Programm?
Buttons sind auch Felder in einem Formular, sie haben aber nicht zwingend einen Namen. Damit kann FormItem.Item(j).Name leer sein. Hier könntest Du mal probieren, ob eine Abfrage mit EmptyVar funktioniert.

Weiß nicht, ob sowas funktionieren könnte:
Delphi-Quellcode:
       
        if Not (FormItem.Item(j).Name = EmptyVar)
        and (FormItem.Item(j).Name = FieldName) then
        begin
          FormItem.Item(j).Value := Value;
          Result := True;
        end;
Dashier ist äußerst ungeschickt:
Delphi-Quellcode:
      except
        Exit;
      end;
Damit ignorierst Du Deine Fehler und verlierst die Fehlermeldung.
Da Du den Rückgabewert von FillForm nie benutzt, könntest Du diesen auf String ändern und dann die Fehlermeldung zurückgeben.
Delphi-Quellcode:
function FillForm(WebBrowser: TWebBrowser; FieldName: string; Value: string): String;
var
  i, j: Integer;
  FormItem: Variant;
begin
  Result := 'setze ' + FieldName + '=' + Value;
...
  Except
    on E: Exception do
      Result := Result + #13 + 'Fehler vom Typ: ' + E.ClassName + ', Meldung: ' + E.Message + ' Feld: ' + FieldName;
      ShowMessage(Result);
  end;
end;
Dann spendierst Du dem Programm noch ein Memofeld (unterhalb der Buttons?) und gibst dort den Rückgabewert von FillForm aus.
Delphi-Quellcode:
 
MemoLog.Lines.Clear;
MemoLog.Lines.Add(FillForm(WebBrowser1, 'homepage', 'http://www.swissdelphicenter.ch'));
...
In der endgültigen Programmversion kannst Du das Memo dann unsichtbar machen.
Alternativ kannst Du die Fehler auch in eine LOG-Datei schreiben.

Erutan 19. Aug 2013 01:41

AW: Floating Point division by zero
 
Ahhh, jetzt wird mir so langsam Einiges klar...u.a. auch Sachen nach denen ich später um Rat fragen wollte.

Z.B. das hier:
Zitat:

Auf der Seite scheinen alle Eingabefelder... innerhalb von FieldSets zu stehen. Es kann sein, dass das FillForm dafür nicht geeignet ist, da die Eingabefelder nicht direkt im Form liegen, sondern in FieldSets.
Und ich steh' da wie ein Ochs vorm Berg und wundere mich warum das Ding das Formular von dem Presseverteiler nicht ausfüllen will :roll:

Zitat:

PWert ist nicht zwingend mit einem sinnvollen Wert befüllt.
Jep, das kommt noch. Die Probleme haben sich durch die Variable aber weder verschlimmert noch verbessert. Da man sich nicht bei jedem Presseportal mit den gleichen Zugangsdaten anmelden kann (manche vergeben willkürlich Passwörter oder verwenden z.B. die email als user), die aber dennoch oft die gleichen inputnamen verwenden, mußte ich irgendwie eine Weiche einbauen um nicht immer die gleichen Zugangsdaten eintragen zu lassen. Daher die Variable PWert, die, je nachdem, welches Presseportal aufgerufen wird, einen anderen Wert bekommt. Anhand dieses Wertes kann ich dann eine Weiche für die Belegung der inputfelder einbauen. Das ist aber noch nicht fertig.
Allerdings wird die Variable bei jedem Aufruf schn mal mit einem sinnvollen Wert gefüllt.

Zitat:

Die Seite von Fair-News.de enthält mehrere Formulare. Welches dieser Formulare erwischst Du denn mit Deinem Programm?
Gar keines auf direktem Weg. Die Seite lenkt, wie viele dieser Seiten, jede Anfrage auf die Seite um, die Du auch gesehen hast. Von dort aus muß man sich dann weiter klicken. Der erste Button führt zu einem Formular, das ohne Zugangsdaten zu erreichen ist. Das hatte ich eigentlich vorgesehen.

Zitat:

Gib hier bitte mal FieldName mit aus, damit man weiß, bei welchem Feld der Fehler auftritt.
Mache ich. Melde mich dann wieder.

Zitat:

Das andere Problem liegt in den Exceptions, die die JavaScript-Engine des Internet Explorers produziert. Hier hilft nur das Abschalten der vom Prozessor erzeugten Exceptions. Das hier sollte Dir weiterhelfen.
Vielen Dank. Das hatte ich mir ja auch schon gedacht. Ich hatte nur gehofft, daß das Problem geöst sei wenn ich bei TWebBrowser silet := true stelle. Aber das unterdrückt wohl nur die Meldungen über JavaScript-Fehler.
Ich schaue mir das jetzt an.

Viele Grüße und vielen Dank

Erutan 1. Sep 2013 22:11

AW: Floating Point division by zero
 
So, bin wieder aus dem Urlaub zurück.

Ich habe alle Vorschläge eingebaut bzw. abgearbeitet aber nichts hat geholfen. In den meisten Fällen wollte Delphi den Code gar nicht mehr compilieren.

Dazu kommt noch, daß dieses Konzept, wie nahpets schon sagte, für viele Presseportale einfach nicht geeignet scheint. In einige Fällen, wie etwa beim offenen Presseportal, werden die Felder nicht ausgefüllt, bei anderen, wie bei Nachrichten.net wird eine Anmeldung aus irgendwelchen Gründen verhindert, d.h. ich komme über das Programm gar nicht erst auf die Seite mit dem auszufüllenden Formular. Gleiches bei firmenpresse.de.

Scheinbar bringt der TWebbrowser, obwohl doch einfach nur ein Internet Explorer, nicht alle Eigenschaften eines "echten" Browsers mit was die Portale möglicherweise als Spam werten.
Dabei hatte ich mich ursprünglich für diese Form der Anmeldung entschieden weil sie eben kein Spam darstellt und man die Seiten in Originalform, inklusive aller Werbung, präsentiert bekommt.

Falls jemand eine andere Lösung weiß, dann wäre das echt klasse. Es muß doch irgendeine Möglichkeit geben, diese Portale irgendwie anzusteuern und dort Meldungen einzustellen. Es gibt doch schließlich sogar kommerzielle Formfiller, die für mich jedoch wegen ihrer mangelnden Spezialisierung nicht geeignet sind.

Gibt es vielleicht die Möglichkeit, einen anderen Browser als den TWebbrowser einzusetzen oder die Datenübermittlung komplett anders zu organisieren?
Über IdHTTP geht es übrigens meiner Ansicht nach nicht, da man sich fast überall anmelden muß und die Anmeldedaten nur selten in hidden-fields innerhalb des Formulars gespeichert werden.

Furtbichler 2. Sep 2013 07:36

AW: Floating Point division by zero
 
Haben die Seiten keine API? Wäre das nicht besser? Ist es überhaupt erlaubt/erwünscht, das die Ameldung über Bots ausgeführt wird (Stichwort: AGB)?

Erutan 2. Sep 2013 23:21

AW: Floating Point division by zero
 
Zitat:

Haben die Seiten keine API?
Doch, aber deren Nutzung lassen sich die Betreiber zumeist teuer bezahlen. Würde nur Sinn machen wenn ich aus der Sache ein Geschäft machte. Will ich aber nicht. Ich will ja nur ein Tool für meine eigenen Zwecke. Darüber hinaus reagieren rund 30% der Betreiber gar nicht auf Anfragen. Hab' ich schon versucht.

Zitat:

Ist es überhaupt erlaubt/erwünscht, das die Ameldung über Bots ausgeführt wird (Stichwort: AGB)?
Die meisten Betreiber schließen Bots per AGB aus. Das ist auch verständlich, denn die meisten verdienen an der geschalteten Werbung. Mein Tool ruft aber alle Seiten vollständig auf wie ein normaler Browser. Der einzige Unterschied ist, daß es die Formulare automatisch ausfüllt.

Eine Grauzone vielleicht und den Betreibern sicherlich nicht leicht verständlich zu machen. Ich besuche diese Seiten ohnehin täglich, logge mich ein, fülle die Formulare aus und sende sie ab. Das alles dauert nur mehrere Stunden. Mit dem Tool könnte ich die Arbeit in einer Stunde erledigt haben. Das Ergebnis für die Seitenbetreiber wäre das gleiche - nur für mich würde es eine Zeiteinsparung bedeuten.

Damit das nicht in ein falsches Licht gerät, möchte ich hier mal kurz erklären: Pressemitteilungen bedeuten für die Presseportale unabdingbar wichtigen Content, der die Inhalte der Portale darstellt. Es ist nichts Unrechtes was ich mit meinem Tool mache.

Alle Daten direkt via IdHTTP an die Portale zu versenden wäre da schon bedenklicher.

jaenicke 3. Sep 2013 04:59

AW: Floating Point division by zero
 
Du könntest Chromium Embedded versuchen.

Mit Delphi XE4 funktioniert dein Quelltext jedenfalls ohne jeglichen Fehler, ich habe es gerade ausprobiert.
// EDIT:
Ah, doch, jetzt habe ich den Fehler auch.

// EDIT2:
Das Tag ohne Name ist fieldset auf dem offenen Presseportal. Aber warum nimmst du nicht einfach das Exit im try..except weg, dann funktioniert es doch...
Oder du prüfst eben wirklich auf das Tag.

Erutan 3. Sep 2013 14:55

AW: Floating Point division by zero
 
Zitat:

Mit Delphi XE4 funktioniert dein Quelltext jedenfalls ohne jeglichen Fehler, ich habe es gerade ausprobiert.
// EDIT:
Ah, doch, jetzt habe ich den Fehler auch.
Es ist wie verhext. Gestern hatte ich dutzende Einstellungen geändert und siehe da: Nur ein Absturz während des ganzen Tages.

Heute will ich hoffnungsvoll weiter programmieren und das blöde Ding stürzt wieder ständig ab. Es scheint an der geschalteten Werbung bei den Portale zu liegen. Das ist das einzige, das sich ständig ändert.

Zitat:

Aber warum nimmst du nicht einfach das Exit im try..except weg, dann funktioniert es doch...
Das ändert aber nichts daran, daß das Programm ständig abstürzt. Eigentlich ändert es gar nichts. Nach der Fehlermeldung "Floating Point...etc.) dauert es i,d,R. ein paar Sekunden bis Windows meldet: "Das Programm funktioniert nicht mehr richtig".

Zitat:

Du könntest Chromium Embedded versuchen.
Ist mir zwar unheimlich peinich aber ich kriege keine Erweiterungen, Packages, Komponenten mehr installiert. Als ich vor Jahren noch mit Delphi 5 gearbeitet abe, hatte ich den Bogen raus. Damals habe ich da die Indy-Komponenten installiert. Aber dann war jahrelang Pause und jetzt habe ich Delphi 7...und probiere und probiere und kriege nichts installiert. Hab's auch schon mit dem Embedded Webbrowser versucht. Es klappt einfach nicht. Könnte auch an Windows 8 liegen. Delphi 7 unter window 8 zu installieren war schon eine Herausforderung für sich.

Thom 3. Sep 2013 16:06

AW: Floating Point division by zero
 
Nochmals: Weshalb schaltest du die Gleitkommaexceptions der FPU nicht ab? Das löst das Problem.

Erutan 3. Sep 2013 19:29

AW: Floating Point division by zero
 
Zitat:

Weshalb schaltest du die Gleitkommaexceptions der FPU nicht ab? Das löst das Problem.
Ganz ehrlich? Ich werde aus der verlinkten Seite nicht schlau. Ich habe die funktion

Delphi-Quellcode:
function SetExceptionMask(const Mask: TArithmeticExceptionMask): TArithmeticExceptionMask;
meinem Quellcode hinzugefügt und der Compiler hat sich beschwert.

Ich weiß nicht wie ich die Excptionmask richtig einbaue und einstelle damit es funktioniert.

Thom 3. Sep 2013 19:43

AW: Floating Point division by zero
 
Kann sein, daß das bei Delphi 7 noch nicht dabei war. Du kannst aber auch den Befehl
Delphi-Quellcode:
Set8087CW()
nehmen. Hier findest Du nähere Informationen dazu.


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