Exception der klasse EAccessViolation
spacer
Autor Nachricht
Dellars
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Do 25.01.07 19:54 
Hab mir gerade ein Programm gebaut, dass wie ein Kalender oder eine Uhr funktioniert. Ich schreibe Texte zu best. Uhrzeiten rein, die zu dieser Uhrzeit als Message bei mir aufblinkt. Erste Frage: Hat jmd ne Ahnung wie man die Message wirklich in Windows öffnen kann, nicht dass man das prog anklicken muss um rauszufinden, ob ich noch an etwas erinnert werden wollte.
2. procedure ZeigeDich; (also eigene)
ausblenden Delphi-Quelltext markieren
1:
Form1.Memo2.Text:='';


da stoppt er bei mir gleich nach dem button3.klick (durch den timer wohl verursacht, dass zeigedich aktualisiert wird), wenn ich einen wert bearbeitet habe.

hier mal mein ganzer text..

ausblenden volle Höhe Delphi-Quelltext markieren
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:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
type
  TStapel = ^TStapelZeit;
  TStapelZeit = record
  naechster : TStapel;
  Wert:TTime;
  Text:string;
  end;


  TForm1 = class(TForm)
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  anker: TStapel;
  zahlendrin,p:integer;

implementation

{$R *.dfm}


procedure Wieviel;
var hilfe:TStapel;
begin
zahlendrin:=0;
hilfe:=anker;
while not (hilfe=Nildo begin
hilfe:=hilfe^.naechster;
zahlendrin:=zahlendrin+1;
end;
end;

procedure ZeigeDich;
var HilfsElement:TStapel;
begin
Form1.Memo1.Text:='';
Form1.Memo2.Text:='';
HilfsElement:=anker;
while not (HilfsElement=NILdo
begin
Form1.Memo1.Text:= Form1.Memo1.Text + HilfsElement^.Text +chr(13)+chr(10);
Form1.Memo2.Text:= Form1.Memo2.Text + timetostr(HilfsElement^.Wert) +chr(13)+chr(10);
HilfsElement:=HilfsElement^.naechster;
end;
end;

procedure TryNext(a:TTime;e:integer);
var zaehler:integer;
    voriger,hilfe:TStapel;
    c:string;
begin
hilfe:=anker;
if (e=0and (hilfe^.Wert=a) then begin
c:=hilfe^.Text;
MessageDlg(c,mtWarning,[mbok],0);
anker:=anker^.naechster;
dispose(hilfe);
ZeigeDich;
Wieviel;
end;
if (e>0then begin
zaehler:=0;
hilfe:=anker;
repeat
voriger:=hilfe;
hilfe:=hilfe^.naechster;
zaehler:=zaehler+1;
until zaehler=e;
if hilfe^.Wert=a then begin
c:=hilfe^.Text;
MessageDlg(c,mtWarning,[mbok],0);
voriger^.naechster:=hilfe^.naechster;
dispose(hilfe);
end;
end;
ZeigeDich;
Wieviel;
end;


procedure Rein(z:TTime);
var h,voriger,neu:TStapel;
    j:string;
begin
j:=Form1.Edit4.Text;
h:=anker;
while ((h<>Niland (h^.Wert<z)) do
begin
voriger:=h;
h:=h^.naechster;
end;
new(neu);
neu^.Wert:=z;
neu^.Text:=j;
neu^.naechster:=h;
voriger^.naechster:=neu;
if anker=Nil then anker:=neu;
if h=anker then begin
neu^.naechster:=anker;
anker:=neu;
end;
ZeigeDich;
Wieviel;
Form1.Edit1.Text:='';
Form1.Edit2.Text:='';
Form1.Edit3.Text:='';
Form1.Edit4.Text:='';
end;



procedure TForm1.Button1Click(Sender: TObject);
var f,g,h:string;
    i:TTime;
begin
f:=Edit1.Text;
g:=Edit2.Text;
h:=Edit3.Text;
if ((-1<strtoint(f)) and (strtoint(f)<24and (strtoint(g)<60and (-1<strtoint(g)) and (-1<strtoint(h)) and (strtoint(h)<60)) then begin
i:=strtotime(f+':'+g+':'+h);
Rein(i);
Memo1.Enabled:=True;
Memo2.Enabled:=True;
end else MessageDlg('falscher Zahlenwert',mtWarning,[mbok],0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text:='';
Memo2.Text:='';
p:=0;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var a,b:TTime;
    hilfe:TStapel;
    e,f:integer;
begin
a:=time;
e:=0;
f:=zahlendrin;
Label1.caption:=TimetoStr(a);
hilfe:=anker;
if hilfe<>Nil then begin
repeat
TryNext(a,e);
e:=e+1;
hilfe:=hilfe^.naechster;
until (hilfe=Nilor (zahlendrin<>f)
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var zahl,zaehler:integer;
    hilfe:TStapel;
begin
zaehler:=0;
hilfe:=anker;
zahl:=StrtoInt(Edit5.Text)-1;
if (zahl>-1then begin
if (zahlendrin>zahl)then begin
if (zahl<>0then begin
repeat
hilfe:=hilfe^.naechster;
zaehler:=zaehler+1;
until zaehler=zahl;
end;
Edit6.Text:=TimetoStr(hilfe^.Wert);
Edit7.Text:=hilfe^.Text;
p:=zahl;
end else
MessageDlg('falscher Zahlenwert',mtWarning,[mbok],0);
end else begin
Edit6.Text:='';
Edit7.Text:='';
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var zahl,zaehler:integer;
    hilfe,h,voriger,voriger2:TStapel;
begin
hilfe:=anker;
zaehler:=0;
zahl:=p;
if (zahl>0then begin
repeat
voriger2:=hilfe;
hilfe:=hilfe^.naechster;
zaehler:=zaehler+1;
until zaehler=zahl;
voriger2^.naechster:=hilfe^.naechster;
end;
if (zahl>-1then begin
hilfe^.Wert:=StrtoTime(Edit6.Text);
hilfe^.Text:=Edit7.Text;
h:=anker;
if ((h<>Niland (h^.Wert>hilfe^.Wert)) then begin
hilfe^.naechster:=anker;
anker:=hilfe;
end else begin
while ((h<>Niland (h^.Wert<hilfe^.Wert)) do
begin
voriger:=h;
h:=h^.naechster;
end;
voriger^.naechster:=hilfe;
hilfe^.naechster:=h;
end;
ZeigeDich;
end;
p:=-1;
end;

procedure TForm1.Button4Click(Sender: TObject);
var zahl,zaehler:integer;
    hilfe,voriger:TStapel;
begin
hilfe:=anker;
if anker<>Nil then begin
zaehler:=0;
zahl:=p;
if (zahl>0then begin
repeat
voriger:=hilfe;
hilfe:=hilfe^.naechster;
zaehler:=zaehler+1;
until zaehler=zahl;
voriger^.naechster:=hilfe^.naechster;
dispose(hilfe);
end;
if (zahl=0then begin
hilfe:=anker;
anker:=hilfe^.naechster;
dispose(hilfe);
end;
end;
p:=-1;
ZeigeDich;
Wieviel;
Edit6.Text:='';
Edit7.Text:='';
end;

end.


Moderiert von raziel: Delphi-Tags hinzugefügt
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 8625
Erhaltene Danke: 147

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 28.01.07 20:24 
Kannst Du deinem Quelltext bitte ein wenig Einrückung und aussagekräftigere Bezeichner als Button1 usw. verpassen? Dadurch liest sich der Source einfacher ...

Ferner:
Wozu deklarierst Du die beiden Prozeduren Wieviel und ZeigeDich nicht als Methoden des Formulars? Damit würde sich der Zugriff auf die Elemente des Formulars wesentlich vereinfachen. Gleiches gilt auch für TryNext und Rein. Außerdem solltest Du dich auf eine Sprache für deine Bezeichner festlegen ... Mischmasch sieht blöd aus ;-)

Außerdem: Zeigertypen solltest Du generell mit einem P im Namen beginnen lassen, um diese von normalen Typen wie Records abzuheben ...

_________________
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home