Autor Beitrag
slugg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 27.01.08 13:54 
wie kann ich per delphi einen programmabsturz bzw ne fehlermeldung ignorieren? so das der user nichts mitbekommt?
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8552
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 27.01.08 14:15 
@user profile iconGausi: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8552
Erhaltene Danke: 479

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: So 27.01.08 14:18 
Fehlermeldung ok, aber einen Programmabsturz zu vertuschen ist wirklich nicht so gut ;-).

user profile iconYogu 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? :roll:

_________________
We are, we were and will not be.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 27.01.08 14:24 
user profile iconGausi 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. :mrgreen:

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: So 27.01.08 20:08 
*nixblick*
kannst du das ins noobische übersetzen? :P

ausblenden volle Höhe Delphi-Quelltext
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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 21



BeitragVerfasst: 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