![]() |
Fehler Meldung unterdrücken
Hi,
Mein Programm Arbeitet wunderbar, nur es spuckt die Fehler Meldung aus: 'Listenindex überschreitet Das Maximum (0)' was eigentlich nicht sein kann. Aber es läuft ja, deswegen wie kann ich diese Fehler Meldung ausschalten so dass sie nicht mehr auf dem Monitor angezeigt wird :wall: :wall: :wall: |
Re: Fehler Meldung unterdrücken
das ist keine sehr gute idee, denn der fehler ist trotzdem im prg! warscheinlich hast du bei einer schleife ein -1 oder so vergessen... du hast jedenfalls DEFINITIV einen fehler drin!
|
Re: Fehler Meldung unterdrücken
Hi!
Nein, dann stimmt etwas nicht. Das einfach nur auszuschalten ist sicherlich falsch. Wahrscheinlich hast du eine Schleife, in der du das ganze durchgehst und dann gehst du wohl etwas zu weit. Zeig doch mal deinen Code. Ciao Frederic |
Re: Fehler Meldung unterdrücken
Delphi-Quellcode:
Da müsste er drin sein
unit unitmain;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, shellapi, ExtCtrls, unit1; type TForm1 = class(TForm) OpenDialog1: TOpenDialog; Memo1: TMemo; Panel1: TPanel; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure press(Sender: TObject; var Key: Char); private { Private-Deklarationen } public procedure splitString(const Source: String; const Delimiter: String; const Dest: TStringlist); procedure leseein; procedure dobe; procedure add(s:string); { Public-Deklarationen } end; var Form1: TForm1; sl:tstringlist;// sl= liste in die das script geladen wird c:int64;// c=cursor forgo:integer;// forgo = gehe hinter befehle be:tstringlist;//be = befehl für verarbeitung max:int64;//max = länge der primären stringliste filename:string; b:boolean;// für das beenden e:boolean;// für eingabe es:string;// befehl für eingabe // für script implementation {$R *.dfm} function Starte(verz, appname: string): boolean; var StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation; begin if verz[length(verz)]<>'\' then verz:=verz+'\'; FillChar(StartupInfo, SizeOf(TStartupInfo),0); StartupInfo.cb:=SizeOf(TStartupInfo); if CreateProcess(nil, PChar(verz+appname), nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, startupinfo, ProcessInfo) then begin try WaitForSingleObject(ProcessInfo.hProcess, INFINITE); finally CloseHandle(ProcessInfo.hProcess); CloseHandle(ProcessInfo.hThread); end; result:=true; end else result:=false; end; procedure TForm1.splitString(const Source: String; const Delimiter: String; const Dest: TStringlist); var count: Integer; LStartpos, LEndepos, LSourcelength: Integer; LDelimiterLength : Integer; begin Dest.Clear; count := 1; LStartpos := 0; LEndepos := 0; LSourcelength := length(Source); LDelimiterLength := Length(Delimiter); while count <= LSourcelength do begin if copy(Source, count, LDelimiterLength) = Delimiter then begin LEndepos := count; dest.Add(copy(Source, LStartpos + 1, LEndepos - LStartpos - 1)); LStartpos := count + LDelimiterLength - 1; inc(count,LDelimiterLength); end else begin inc(count); end; end; if LEndePos <> Count - LDelimiterLength then dest.Add(copy(Source, LStartpos + 1, count - LStartpos - 1)); end; procedure TForm1.leseein; var z1,z2: String; begin z1:=sl[0]; // scriptnamen ermitteln z2:=z1+' - abu_scrit by arbutus'; form1.Caption:=copy(z2,7,Length(z2)); if copy(z1,0,6)<>'script' then begin showmessage('Die Datei ist kein gültiges abu script'); exit; end; // hinter befehle gehen repeat forgo:=forgo+1; until sl[forgo]='befehle'; c:=forgo; max:=sl.Count; dobe; end; kommt bei print
Delphi-Quellcode:
procedure TForm1.dobe;
begin if e=false then begin if b=false then begin // zum schlißen // begin mit einlesen der befehle c:=c+1; // cursor weiter setzen if c>=max then begin form1.close;b:=true;exit;end else begin // wenn liste zuende if sl[c]='' then begin dobe; exit;end; // bei leerstring witer try // falls was schif geht splitString(sl[c],'|',be); //zerlege befehl be.Add('');// damit keine fehler kommen //anweisung erkennen if be[0]='showmessage' then {try} showmessage(be[1]);{except be.clear;end}; //showmessage fumction if be[0]='end' then begin form1.SetFocus; form1.Close;b:=true; exit; end; // beenden if be[0]='halt' then sleep(strtoint(be[1])); //hate script an if be[0]='install' then begin // app starten und auf ende warten Starte(extractfilepath(application.ExeName),be[1]);;;;end; if be[0]='print'then begin {try} Add(be[1]);{except be.clear;end;};end; // zeile schreiben if be[0]='close'then application.Terminate;// aus if be[0]='rechne' then begin e:=true; es:=be[0]; edit1.SetFocus; end; if be[0]='wait' then begin e:=true; es:=be[0]; edit1.SetFocus; end; finally be.Clear;// stringliste für nächste anweisung vorbereiten if b=false then dobe; // wiederholen end;end;end;end; end;
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin //allgemeine einstellungen //ende sl:=tstringlist.Create;// um Datei laden zu können forgo:=1; // nach script {name} c:=1;//cursor auf ersten befehl setzen be:=tstringlist.create;// für befehl verarbeitung if paramcount <> 0 then // überprüfe ob eine datei übergeben wurde begin filename := paramstr(1); end; if filename <> '' then begin // wenn ja lade sie sl.LoadFromFile(FileName); //lade datei form1.Show; leseein; end; end; procedure TForm1.add(s:string); begin memo1.lines.Add(s); be.Clear; dobe; end; procedure TForm1.press(Sender: TObject; var Key: Char); begin //bestätigung der eingabe if e=true then begin if key = #13 then begin add(eingabe(es,edit1.text)); e:=false;// eingabe kommt aus unit1 dobe; end; end; end; end. |
Re: Fehler Meldung unterdrücken
|
Re: Fehler Meldung unterdrücken
Hi!
Du solltest dir unbedingt Gedanken darüber machen, den Code besser zu strukturieren und formatieren. Ich sehe mich nicht in der Lage, da irgendwas zu erkennen, sry. Schau mal unter ![]() Ciao Frederic |
Re: Fehler Meldung unterdrücken
Delphi-Quellcode:
procedure TForm1.dobe;// ausfüren von befehlen die im script stehen
begin if e=false then begin if b=false then begin // zum schlißen // begin mit einlesen der befehle c:=c+1; // cursor weiter setzen // wenn liste zuende if c>=max then begin form1.close; b:=true; exit;end else begin if sl[c]='' then begin dobe; exit;end; // bei leerstring weiter try // falls was schif geht splitString(sl[c],'|',be); //zerlege befehl be.Add('');be.Add('');// damit keine fehler kommen //anweisung erkennen //showmessage fumction if be[0]='showmessage' then showmessage(be[1]); // beenden if be[0]='end' then begin form1.SetFocus; form1.Close;b:=true; exit; end; //hate script an if be[0]='halt' then sleep(strtoint(be[1])); // app starten und auf ende warten if be[0]='install' then begin Starte(extractfilepath(application.ExeName),be[1]);;;;end; // zeile schreiben if be[0]='print'then begin Add(be[1]);end; // aus if be[0]='close'then application.Terminate; // benutzer gibt eine rechnung ein die ausgerechnet wird if be[0]='rechne' then begin e:=true; es:=be[0]; edit1.SetFocus; end; // warte auf benutzer eingabe if be[0]='wait' then begin e:=true; es:=be[0]; edit1.SetFocus; end; finally be.Clear;// stringliste für nächste anweisung vorbereiten if b=false then dobe; // wiederholen end; end; end; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 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-2025 by Thomas Breitkreuz