Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Automatisch nach Dateien suchen lassen?
Tharian - Mo 15.11.10 21:48
Titel: Automatisch nach Dateien suchen lassen?
Guten Abend zusammen,
vorab - ich bin noch recht neu bei Delphi, also wenn möglich keine zu komplexe Methoden ;)
Ich würde gerne wissen, wie ich ein Programm permanent bzw. alle paar Sekunden überprüfen lassen kann, ob eine von 9 Dateien sich im Verzeichnis befindet. Falls ja, soll je nach gefundener Datei eine bestimmte Aktion ausgelöst werden (die Caption eines Labels ändern, aber das ist erstmal unwichtig). Das soll einfach im Hintergrund laufen und nicht jedes mal neu durch einen Button oder ähnliches ausgelöst werden. Ist das irgendwie möglich?
Danke schonmal,
Tharian
Delete - Mo 15.11.10 22:05
FindFirst, FindNext, Timer oder eigener Thread.
Daniel L. - Mo 15.11.10 22:08
Ja, mit einem Timer Ereigniss
Tharian - Mo 15.11.10 22:11
Luckie hat folgendes geschrieben : |
| FindFirst, FindNext, Timer oder eigener Thread. |
Danke, ich hab dazu gerade diesen Codeschnipsel gefunden:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| var searchResult : TSearchRec;
begin if FindFirst('Unit1.d*', faAnyFile, searchResult) = 0 then begin repeat ShowMessage('File name = '+searchResult.Name); ShowMessage('File size = '+IntToStr(searchResult.Size)); until FindNext(searchResult) <> 0;
FindClose(searchResult); end; end; |
Dabei wird wohl solange gesucht, bis eine Datei mit dem entsprechenden Namen gefunden wird, oder? Kann man das einfach so laufen lassen oder kostet das zu viel Leistung? Wie würde das mit dem Timer funktionieren, also dass es - sagen wir - alle 5 Sekunden gesucht wird?
bummi - Mo 15.11.10 22:15
Bei den Jedis war IMHO auch ein ShellNotifyEvent dabei.
jaenicke - Di 16.11.10 06:47
bummi hat folgendes geschrieben : |
| Bei den Jedis war IMHO auch ein ShellNotifyEvent dabei. |
Dafür braucht man die JEDIs nicht, es reicht auch die reine API, z.B. mit ReadDirectoryChanges:
http://msdn.microsoft.com/en-us/library/aa365465(VS.85).aspx
Natürlich sind Komponenten ggf. einfacher, dafür auch umständlicher.
Tharian - Di 16.11.10 14:51
Ok, ich habs jetzt mal versucht... aber ich glaube irgendwas stimmt mit der Funktion nicht. Allerdings kommt nur ein einziger Error, und zwar dass 'Button2' ein undefinierter Bezeichner sei (er exisitiert aber). Das ist der Code bzw. die Stelle:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function searchResult : TSearchRec; var searchResult : TSearchRec; begin if FindFirst('Test.txt*', faAnyFile, searchResult) = 0 then begin repeat ShowMessage('File name = '+searchResult.Name); ShowMessage('File size = '+IntToStr(searchResult.Size)); until FindNext(searchResult) <> 0;
if FindFirst('Test.txt*', faAnyFile, searchResult) = 1 then Button2.Caption:='X'; FindClose(searchResult); end; end; |
PistolenPeter - Di 16.11.10 14:54
Dann poste doch bitte mal Deinen gesamten Quelltext.
Grüße
ALF - Di 16.11.10 15:08
evtl hilft ja schon
Delphi-Quelltext
1:
| Form1.Button2.Caption:='X'; |
Wenn der Bezeichner so geblieben ist "Form1".
Gruss ALf
Gausi - Di 16.11.10 15:10
Du hast da eine lose Funktion, keine Methode der Form. Daher kennt diese Funktion den Button nicht. Du kannst entweder den Button ansprechen über Form1.Button2 (oder wie die Form auch heißen mag).
Oder, imho besser: Du machst die Funktion zu einer Methode der Form, also
function TForm1.searchResult : TSearchRec; und trägst die Methode auch oben in der Definition von TForm1 ein, also da, wo auch die ganzen anderen Prozedur-Namen aufgeführt sind.
jaenicke - Di 16.11.10 15:12
Gausi hat folgendes geschrieben : |
| Oder, imho besser: Du machst die Funktion zu einer Methode der Form |
Nicht nur besser, sondern vor allem richtiger.
Denn ohne das spricht man den Button der Instanz des Formulars an, das zufällig in der globalen Variablen Form1 liegt (und wundert sich ggf. warum nix passiert). Wenn es eine Methode des Formulars ist, spricht man die richtige Instanz an.
Tharian - Di 16.11.10 15:29
Ok, das klingt alles logisch... aber es funktioniert trotzdem nicht. Ich poste jetzt einfach mal den ganzen Code, auch wenn das noch lange nicht fertig ist. Kurze Erklärung: Das wird ein Multiplayer-TicTacToe, das über Dateien in einem Shared-Ordner von Dropbox kommuniziert. Ich weis, ist unglaublich bescheuert. Aber ich wills trotzdem ausprobieren ;)
Aktuell kommen 2 Fehler, einmal sei SearchResult undefiniert, und dann erwartet er bei 'function TForm1.searchResult : TSearchRec;' einen : statt einem ; (was allerdings nichts ändert, wenn ich das anpasse).
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; TForm1.SearchResult : TSearchRec; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; Playersymbol :char;
implementation
{$R *.dfm}
function TForm1.SearchResult ; TSearchRec; var searchResult : TSearchRec; begin
if FindFirst('Test.txt*', faAnyFile, searchResult) = 0 then begin repeat ShowMessage('File name = '+searchResult.Name); ShowMessage('File size = '+IntToStr(searchResult.Size)); until FindNext(searchResult) <> 0 end; if FindFirst('Test.txt*', faAnyFile, searchResult) = 1 then Form1.Button2.Caption:='X';
FindClose(searchResult); end;
procedure TForm1.Button1Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='' then Playersymbol:='X' else if Playersymbol='X' then Playersymbol:='O' else Playersymbol:='O';
Button1.Caption:=Playersymbol;
end;
begin if FileExists('Feldas1.txt') then begin AssignFile(f, 'Feldas1.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, 'Feldas1.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
Playersymbol:='O'
end;
end;
end. |
Gausi - Di 16.11.10 15:30
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; function SearchResult : TSearchRec; procedure Button1Click(Sender: TObject); private public end; |
jaenicke - Di 16.11.10 16:18
Unter published im Standardbereich ist aber schlecht, das mag Delphi absolut nicht. Besser unter private, public oder wirklich published.
guinnes - Di 16.11.10 16:24
Und warum eine Function ? Das Ergebnis wird nicht verwendet. Und die Namensgebung.....
Tharian - Di 16.11.10 16:36
Jetzt hab ich diesen Fehler :/
Delphi-Quelltext
1: 2:
| [Fehler] Unit1.pas(20): Ungenügende Forward- oder External-Deklaration: 'TForm1.SearchResult' [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden |
Die Function soll später noch verwendet werden, das kommt noch... aber solange sie nicht läuft kann ich das gar nicht ;)
bummi - Di 16.11.10 17:07
Leg mal ein , zwei Buttons auf Dein Formular, versorge das OnClick und schau Dir an wie der Deklarationsteil und wie der Implementationteil aussieht.
in der Klassendeklaration immer ohne z.B: Tform1
in implementation immer MIT TForm1. sofern es sich um Klassenfunktionen/Prozeduren handelt.
guinnes - Di 16.11.10 19:28
Tharian hat folgendes geschrieben : |
| Die Function soll später noch verwendet werden, das kommt noch... aber solange sie nicht läuft kann ich das gar nicht ;) |
1. Deine Funktion heißt genau so wie deine lokale Variable, ich weiß nicht, was Delphi da macht
2. Du fragst nicht nach einer Datei, sondern nach mehreren. Dein Result gibt dir im besten Fall die Informationen der letzten zurück
3. Du weist nirgendwo ein Ergebnis ( Result ) zu
4. Du rufst deine Funktion ja noch gar nicht auf
Tharian - Di 16.11.10 19:40
guinnes hat folgendes geschrieben : |
Tharian hat folgendes geschrieben : | | Die Function soll später noch verwendet werden, das kommt noch... aber solange sie nicht läuft kann ich das gar nicht ;) |
2. Du fragst nicht nach einer Datei, sondern nach mehreren. Dein Result gibt dir im besten Fall die Informationen der letzten zurück
3. Du weist nirgendwo ein Ergebnis ( Result ) zu
|
2. Wie kann ich denn dann nach genau einer mit einem genau definieren Namen suchen?
3. Ich dachte das mache ich mit ' if FindFirst('Test.txt*', faAnyFile, searchResult) = 1 then', wo im Falle eines Fundes die Caption von Button2 verändert werden soll. Geht das nicht so?
platzwart - Di 16.11.10 19:52
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| If(FileExists('Hier steht die Datei inkl. Pfad'))then begin end else begin end; |
Bergmann89 - Di 16.11.10 20:14
Hey,
das war auch mein 1. Gedanke, einfach ein Array mit den Namen der Datein. Dann kann man ja ganz normal gucken ob die Datein da sind oder nich...
MfG Bergmann.
Tharian - Di 16.11.10 20:29
platzwart hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| If(FileExists('Hier steht die Datei inkl. Pfad'))then begin end else begin end; | |
Ok, eigentlich logisch, danke. Ich nehme an wenn ich keinen Pfad angebe wird automatisch der Pfad genommen, in dem die .exe ist?
Gausi - Di 16.11.10 20:42
Tharian hat folgendes geschrieben : |
| Ich nehme an wenn ich keinen Pfad angebe wird automatisch der Pfad genommen, in dem die .exe ist? |
Nein, das ist nicht so. Funktioniert zwar manchmal, aber das sollte man sich keinesfalls angewöhnen. Den Pfad der Exe bekommt man mit
ExtractFilePath(ParamStr(0));, und der gehört in diese Abfrage mit rein. ;-)
platzwart - Di 16.11.10 20:43
Delphi-Quelltext
1:
| FileExists(ExtractFilePath(ParamStr(0)) + 'datei.dat') |
Tharian - Di 16.11.10 22:12
platzwart hat folgendes geschrieben : |
Delphi-Quelltext 1:
| FileExists(ExtractFilePath(ParamStr(0)) + 'datei.dat') | |
Ok, danke. Hab ich jetzt noch nicht mit drin, weil die Stelle bisher auch so klappt (ich werds ändern wenn es läuft ;) ).
Allerdings kommt da irgendwas durcheinander mit den X bzw. O... Die sollen natürlich abwechselnd kommen, aber irgendwie klappt das nicht immer. Es scheint auch auf die Felder anzukommen, die man anklickt, wie lange es 'gut geht'. Irgendwie erkenne ich da kein Muster :/
Habt ihr eine Idee? Ich wollte erst am Anfang dem Playersymbol einen Wert (ein X) zuweisen, aber das hat auch nicht wirklich was genützt...
Und ja, ich weis, das könnte man alles viel kompakter machen mit case und so, aber das hab ich auch noch vor ;)
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: 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: 275: 276: 277: 278: 279: 280: 281: 282: 283: 284: 285: 286: 287: 288: 289: 290: 291: 292: 293: 294: 295: 296: 297: 298: 299: 300: 301: 302: 303: 304: 305: 306: 307: 308: 309: 310: 311: 312: 313: 314: 315: 316: 317: 318: 319: 320: 321: 322: 323: 324: 325: 326: 327: 328: 329: 330: 331: 332: 333: 334: 335: 336: 337: 338: 339: 340: 341: 342: 343: 344: 345: 346: 347: 348: 349: 350: 351: 352: 353: 354: 355: 356: 357: 358: 359: 360: 361: 362: 363: 364: 365: 366: 367: 368: 369: 370: 371: 372: 373: 374: 375: 376: 377: 378: 379: 380: 381: 382: 383: 384: 385: 386: 387: 388: 389: 390: 391: 392: 393: 394: 395: 396: 397: 398: 399: 400: 401: 402: 403: 404: 405: 406: 407: 408: 409: 410: 411: 412: 413: 414: 415: 416: 417: 418: 419: 420: 421: 422: 423: 424: 425: 426: 427: 428: 429: 430: 431: 432: 433: 434: 435: 436: 437: 438: 439: 440: 441: 442: 443: 444: 445: 446: 447: 448: 449: 450: 451: 452: 453: 454: 455: 456: 457: 458: 459: 460: 461: 462: 463: 464: 465: 466: 467: 468: 469: 470: 471: 472: 473: 474: 475: 476: 477: 478: 479: 480: 481: 482: 483: 484: 485: 486: 487: 488: 489: 490: 491: 492: 493: 494: 495: 496: 497: 498: 499: 500: 501: 502: 503: 504: 505: 506: 507: 508: 509: 510: 511: 512: 513: 514: 515: 516: 517: 518: 519: 520: 521: 522: 523: 524: 525: 526: 527: 528: 529: 530: 531: 532: 533: 534: 535: 536: 537: 538: 539: 540: 541: 542: 543: 544: 545: 546: 547: 548: 549: 550: 551: 552: 553: 554: 555: 556: 557: 558: 559: 560: 561: 562: 563: 564: 565: 566: 567: 568: 569: 570: 571: 572: 573: 574: 575: 576: 577: 578: 579: 580: 581: 582: 583: 584: 585: 586: 587: 588: 589: 590: 591: 592: 593: 594: 595: 596: 597: 598: 599: 600: 601: 602: 603: 604: 605: 606: 607: 608: 609: 610: 611: 612: 613: 614: 615: 616: 617: 618: 619: 620: 621: 622: 623: 624: 625: 626: 627: 628: 629: 630: 631: 632: 633: 634: 635: 636: 637: 638: 639:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Timer1: TTimer; Button10: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button10Click(Sender: TObject); private public end;
var Form1: TForm1; Playersymbol :char;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin begin If(FileExists('X1.txt'))then begin Form1.Button1.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X2.txt'))then begin Form1.Button2.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X3.txt'))then begin Form1.Button3.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X4.txt'))then begin Form1.Button4.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X5.txt'))then begin Form1.Button5.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X6.txt'))then begin Form1.Button6.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X7.txt'))then begin Form1.Button7.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X8.txt'))then begin Form1.Button8.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('X9.txt'))then begin Form1.Button9.Caption:='X'; Playersymbol:='X'; end; end;
begin If(FileExists('O1.txt'))then begin Form1.Button1.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O2.txt'))then begin Form1.Button2.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O3.txt'))then begin Form1.Button3.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O4.txt'))then begin Form1.Button4.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O5.txt'))then begin Form1.Button5.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O6.txt'))then begin Form1.Button6.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O7.txt'))then begin Form1.Button7.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O8.txt'))then begin Form1.Button8.Caption:='O'; Playersymbol:='O'; end; end;
begin If(FileExists('O9.txt'))then begin Form1.Button9.Caption:='O'; Playersymbol:='O'; end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button1.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'1.txt') then begin AssignFile(f, Playersymbol+'1.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'1.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end; end;
procedure TForm1.Button2Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button2.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'2.txt') then begin AssignFile(f, Playersymbol+'2.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'2.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button3.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'3.txt') then begin AssignFile(f, Playersymbol+'3.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'3.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button4Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button4.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'4.txt') then begin AssignFile(f, Playersymbol+'4.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'4.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end; end;
procedure TForm1.Button5Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button5.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'5.txt') then begin AssignFile(f, Playersymbol+'5.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'5.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button6Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button6.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'6.txt') then begin AssignFile(f, Playersymbol+'6.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'6.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button7Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button7.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'7.txt') then begin AssignFile(f, Playersymbol+'7.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'7.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end; end;
procedure TForm1.Button8Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button8.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'8.txt') then begin AssignFile(f, Playersymbol+'8.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'8.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button9Click(Sender: TObject); var f: Textfile; begin
begin
if Playersymbol='O' then Playersymbol:='X' else Playersymbol:='O';
Button9.Caption:=Playersymbol;
end;
begin if FileExists(Playersymbol+'9.txt') then begin AssignFile(f, Playersymbol+'9.txt'); Append(f); Writeln(f, ''); CloseFile(f); end else begin AssignFile(f, Playersymbol+'9.txt'); Rewrite(f); Writeln(f, ''); CloseFile(f); end;
end;
end;
procedure TForm1.Button10Click(Sender: TObject); begin
begin if MessageDLG('Spiel zurücksetzen und neu beginnen?',mtConfirmation, [mbYes,mbNo],0)=mrYes then begin
If (FileExists('X1.txt'))then Deletefile('X1.txt');
If(FileExists('X2.txt'))then Deletefile('X2.txt');
If(FileExists('X3.txt'))then Deletefile('X3.txt');
If(FileExists('X4.txt'))then Deletefile('X4.txt');
If(FileExists('X5.txt'))then Deletefile('X5.txt');
If(FileExists('X6.txt'))then Deletefile('X6.txt');
If(FileExists('X7.txt'))then Deletefile('X7.txt');
If(FileExists('X8.txt'))then Deletefile('X8.txt');
If(FileExists('X9.txt'))then Deletefile('X9.txt');
If(FileExists('O1.txt'))then Deletefile('O1.txt');
If(FileExists('O2.txt'))then Deletefile('O2.txt');
If(FileExists('O3.txt'))then Deletefile('O3.txt');
If(FileExists('O4.txt'))then Deletefile('O4.txt');
If(FileExists('O5.txt'))then Deletefile('O5.txt');
If(FileExists('O6.txt'))then Deletefile('O6.txt');
If(FileExists('O7.txt'))then Deletefile('O7.txt');
If(FileExists('O8.txt'))then Deletefile('O8.txt');
If(FileExists('O9.txt'))then Deletefile('O9.txt');
begin Button1.Caption:=''; Button2.Caption:=''; Button2.Caption:=''; Button3.Caption:=''; Button4.Caption:=''; Button5.Caption:=''; Button6.Caption:=''; Button7.Caption:=''; Button8.Caption:=''; Button9.Caption:=''; end;
end;
end; end;
end. |
bummi - Di 16.11.10 22:23
Sorry jetzt wird es OT aber IMHO solltest Du Dich mal mit TIniFile beschäftigen, das würde Deinen Dateienwald etwas eindampfen.
LG
Thomas
Gerd Kayser - Di 16.11.10 22:41
bummi hat folgendes geschrieben : |
| Sorry jetzt wird es OT aber IMHO solltest Du Dich mal mit TIniFile beschäftigen, das würde Deinen Dateienwald etwas eindampfen. |
Wenn man es geschickt anfängt, kann man sogar den Umfang der Unit um über 90 Prozent kürzen, insbesondere die If- und Delete-Orgien.
Bergmann89 - Mi 17.11.10 00:24
Hey,
also eig sind Datein ja dazu da, um was abzulegen, was man nochma benötigt, wenn man das Probgramm neu öffnet. Oder wenn es zu viel für den Arbeitsspeicher ist. Warum nimmst du nich einfach ein
array[0..8] of Boolean; Das ist unkompliziert, 1000 ma schneller als der Zugriff auf eine Datei und auch programmiertechnisch um weiten besser gelöst als die Sache mit den TXTs. Es sei denn du hast noch irgendetwas mit den TXTs vor (außer das Kreuz des Spielers zu speichern) dann nehm ich alles zurück.
Vlt soltlest du dir auch erstmal
DAS [
http://www.christian-stelzmann.de/artikel/crashkurs.htm] angucken ;)
MfG Bergmann.
Gerd Kayser - Mi 17.11.10 04:30
Bergmann89 hat folgendes geschrieben : |
| Es sei denn du hast noch irgendetwas mit den TXTs vor (außer das Kreuz des Spielers zu speichern) dann nehm ich alles zurück. |
Das wird doch wohl hoffentlich nicht ein Tic-Tac-Toe-Spiel ... :autsch:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!