| Autor |
Beitrag |
slugg
      
Beiträge: 21
|
Verfasst: So 27.01.08 13:54
wie kann ich per delphi einen programmabsturz bzw ne fehlermeldung ignorieren? so das der user nichts mitbekommt?
|
|
Gausi
      
Beiträge: 8552
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 27.01.08 14:11
Gegenfrage: Wie kann ich einen Unfall auf der Autobahn ignorieren, so dass die Insassen nichts davon mitbekommen? 
_________________ We are, we were and will not be.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 27.01.08 14:15
@ Gausi: Das ist was anderes. Eine Exception wird ausgelöst, wenn das Programm einen Unfall baut, und der Rechner bekommt zwangsläufig was mit. Dem User aber kannst du selenruhig erklären, was los ist.
Mit der try ... except-Struktur kannst du Fehler behaldeln. Du fügst in den try-Teil den Code ein, der eventuell Fehler enthalten kann, und in den except-Teil, das, was bei einem Fehler passieren soll. Wenn der User nicht informiert werden soll (empfiehlt sich nur bei vorrausgesehenen Fehlern, die man nicht behoben kriegt), lässt du den Teil einafach leer. Am Schluss steht noch ein end;.
|
|
Gausi
      
Beiträge: 8552
Erhaltene Danke: 479
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: So 27.01.08 14:18
Fehlermeldung ok, aber einen Programmabsturz zu vertuschen ist wirklich nicht so gut  .
Yogu hat folgendes geschrieben: | | (empfiehlt sich nur bei vorrausgesehenen Fehlern, die man nicht behoben kriegt) |
Na, das ist ja toll. Wenn die Bremsen nicht funktionieren, lässt man den User einfach weiterfahren, weil man die nicht repariert bekommt, oder wie? 
_________________ We are, we were and will not be.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 27.01.08 14:24
Gausi hat folgendes geschrieben: | | Wenn die Bremsen nicht funktionieren, lässt man den User einfach weiterfahren, weil man die nicht repariert bekommt, oder wie? |
Nein. Man lässt den User aussteigen, lässt den Rechner gegen die Mauer fahren, holt ein neues Auto und setzt den User wieder rein.
Ich habe zum Beispiel folgendes Problem:
Wenn ich einen Ordner lade, aber nicht weiß, ob der geschützt ist (z. B. System Volume Information), dann füge ich das in ein try...except ein.
Aber bitte keine Lösungsvorschläge!! (Es ist ein Moderator anwesend)
|
|
slugg 
      
Beiträge: 21
|
Verfasst: So 27.01.08 18:48
es geht um einen chat der auf einer datei basiert, bei mehreren leuten kanns vorkommen, dass die datei bereits in nutzung ist, das kann dem user eigentlich egal sein! der soll ja nur lesen können was der andere schreibt
mfg
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 27.01.08 18:54
Kurzeinschätzung: Prinzip ist BRaindead by Design
Gerade für einen Chat sollte man lieber Sockets nehmen (entweder mit TCP oder UDP), aber KEINE Dateien, die über Netzwerk eh nicht vernünftig gelockt werden können. Kann man zwar indirekt über sog. LockFiles machen, aber für Braindead-Designs gibt es von meiner Seite keinen Support.
Narses hat für akzeptable Lösungen sehr gute Tutorials in der Library veröffentlicht. Les die doch einfach mal!
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
slugg 
      
Beiträge: 21
|
Verfasst: So 27.01.08 19:07
ich glaub ich hab vergessen zu sagen, dass ich delphi noob bin und wir gerade file speichern im unterricht (11. klasse info leistungskurs) dran haben, deshalb diese idee als projektarbeit ^^
soll nix besonderes werden, klar isses sinnlo ^^
wenn ic hsowas mach muss ich das auch an den unterricht anlehnen --> datei ^^
also gehts nur so ^^
das programm soll einfach nicht mit der meldung " zugriff nicht möglich; datei wird gerade verwendet" abstürzen ^^
mfg
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 27.01.08 19:24
Einfach um die fehlerverursachenden Zeilen ein Try-Except drum rum machen und die geworfene Exception auswerten. Wenn nämlich ein anderer IO-Fehler auftritt, sollte der User ja sehr wohl noch darüber informiert werden, nicht wahr???
Die abztufangende Exception-Klasse ist IIRC EIOException oder eine abgeleitete Klasse davon. Die Syntax von Try Except findest Du recht anschaulich in der Delphi-Hilfe erklärt.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
slugg 
      
Beiträge: 21
|
Verfasst: So 27.01.08 20:08
*nixblick*
kannst du das ins noobische übersetzen?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls, ColorGrd;
type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; Edit2: TEdit; Button2: TButton; Button3: TButton; Edit3: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label1: TLabel; Label2: TLabel; Label3: TLabel; Memo1: TMemo; Label4: TLabel; Label5: TLabel; Timer1: TTimer; RichEdit1: TRichEdit; ColorDialog1: TColorDialog; Button4: TButton; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private public end;
var Form1: TForm1;
implementation
{$R *.dfm} var i:textFile; d,user,k:string; procedure TForm1.BitBtn1Click(Sender: TObject); begin Close; end;
procedure TForm1.Button3Click(Sender: TObject); begin d:=edit3.text; Richedit1.Lines.LoadFromFile(d +k);
Richedit1.Perform(WM_VSCROLL, SB_BOTTOM, 0); label4.caption:=d; label5.Visible:=true; edit3.Text:=''; timer1.enabled:=true; end;
procedure TForm1.Button2Click(Sender: TObject); var a, e:integer; begin d:=edit2.Text; AssignFile(i,d + k); rewrite (i); CloseFile(i); label4.caption:=d; label5.Visible:=true; edit2.Text:=''; timer1.enabled:=true; end;
procedure TForm1.BitBtn2Click(Sender: TObject); var e,a:integer; begin AssignFile(i,d + k); append (i); e:=Memo1.Lines.Count; for a:=0 to e-1 do writeln (i, user + ' sagt: ' + memo1.Lines.Strings[a]); CloseFile(i);
memo1.clear;
end;
procedure TForm1.Button4Click(Sender: TObject); begin RichEdit1.Font.Color := ColorDialog1.Color; end;
procedure TForm1.Button1Click(Sender: TObject); begin edit1.Enabled:=false;
user:=edit1.Text; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin Richedit1.Lines.LoadFromFile(d + k);
Richedit1.Perform(WM_VSCROLL, SB_BOTTOM, 0); end;
procedure TForm1.FormCreate(Sender: TObject); begin k:='.rtf'; end;
end. |
das mein quelltext und da soll der "datei kann nicht ... bla" fehler ausgeblendet werden
mfg
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 27.01.08 20:29
Sorry, aber ich spreche kein noobisch.
Vielleicht helfen Dir ja die Funktionen Einzelschritt, Haltepunkt und die ganzen anderen Werkzeuge, die Dir Delphi für die Fehlersuche bietet?
Außerdem bietet Delphi eine F1-Funktion.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
slugg 
      
Beiträge: 21
|
Verfasst: So 27.01.08 21:43
naja als totaler anfänger isses halt schwer euch zu folgen, die schon ahnung haben
da hab ich zb kein plan wo ich was machen soll usw... ^^ sry
ich versuch mich durchzubeißen!
wird schon
edit: ich weiß ja gar nicht wo ich ansetzen soll... der fehler is ja extern hervorgerufen, eben wenn die datei gerade gelesen/beschrieben wird
|
|
|