| Autor |
Beitrag |
Niko S.
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Fr 17.07.09 13:46
Also ich würde gerne eine Datei laden die soweit ich das überblicken kann aus diesem Record besteht:
www.delphi-forum.de/...im+Record_93720.html
Das Einzige was nicht funktioniert ist das mit dem "Type" aber das ist (hoffe ich) nicht unbedingt schlim...
Nunja auf jedenfall kann ich diese Datei einfach nicht laden obwohl da nur ein Missmatch besteht unzwar Type / Type2 (Bei meinen Records)
die Ladeprozeduren sehen so aus: (original)
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| Sub LoadMaps() Dim FileName As String Dim I As Integer Dim f As Integer
Call CheckMaps
For I = 1 To MAX_MAPS temp = I / MAX_MAPS * 100 Call SetStatus("Loading maps... " & temp & "%") FileName = App.Path & "\maps\map" & I & ".dat"
f = FreeFile Open FileName For Binary As #f Get #f, , Map(I) Close #f
Next I
End Sub |
Und das habe ich über einen Stream in Delphi probiert aber irgendwie bekomme ich da keine werte raus,
kann mir da vielleicht wer helfen?
// Edit CheckMaps ist nur zum prüfen ob die Datein existieren und eventuell zu "clearen" also 0 werte einzutragen.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Fr 17.07.09 13:51
Moin!
Niko S. hat folgendes geschrieben : | Und das habe ich über einen Stream in Delphi probiert aber irgendwie bekomme ich da keine werte raus,
kann mir da vielleicht wer helfen? |
Bestimmt, aber  wo ist dein Code?
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Niko S. 
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Fr 17.07.09 13:53
Wah doch noch was vergessen..
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| var Mapfile: TFileStream; begin MapFile := TFileStream.Create(Datei, fmOpenRead + fmShareDenyWrite); try MapFile.read(Map, SizeOf(Map)); finally FreeAndNil(MapFile); end; |
Hab so das gefühl, dass das nicht so dem code enspricht von VB aber irgendwie kann ich VB nicht so ganz lesen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 17.07.09 13:58
Was ist Map und was meinst du mit "bekomme keine Werte raus"?
|
|
Niko S. 
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Fr 17.07.09 14:38
steht in dem Thread im den ich verlinkt habe im ersten post.
map ist ein record..
was leider nicht ganz übereinstimmt mit den original vielleicht liegt es ja daran?
Und mit keine werte meine ich, dass die werte (zumindest in der Tile array immer 0 sind..)
//Edit
Reinhard Kern hat im vorherigen Thread ja noch einmal geantwortet und ich habe das jetzt ins "packed record"
übernommen aber die werte sind immernoch 0..
gerade bei Revision sollte der wert nicht 0 sein...
Jetzt habe ich noch einmal in "Name" einfach mal "Kamis Map" eingetragen aber mit delphi lese ich aus der Datei:
Quelltext
Und ich bekommen nen runtime error wenn ich das Programm wieder schließe oO
Quelltext 1: 2: 3: 4: 5: 6: 7:
| --------------------------- Error --------------------------- Runtime error 216 at 0040383E --------------------------- OK --------------------------- |
|
|
Niko S. 
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Sa 18.07.09 18:52
Bump
Das Problem besteht immernoch..
Hier ist der Link zum kompletten Source
freemmorpgmaker.com/...ution-2.8-Source.rar
Ich weiß im moment nicht wie ich das Debuggen soll, ich hab so das gefühl das irgendwie alles um 1 verschoben ist oder so.
(Siehe Mapname = Kamis Map aber auslesen kann ich nur "amis Map" und irgend ein Zeichen..)
Vielleicht noch ein paar Infos:
modDatabase.bas im Client ordner: Steht der Source fürs laden und speichern
modTypes -> typendeclaration für das map format
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Sa 18.07.09 18:58
1. Runtime error mit einem FileStream? Äh, sowas hab ich ja noch nie gesehen.. Zeig bitte nochmal den aktuellen Code. Oder ist das der selbe wie oben?
2. Du verwendest in deinem Record den Typ String, OHNE eine Länge anzugeben. Das kann unter Delphi Probleme geben. Versuch mal ShortString. Das hat eine maximale Größe von 255 Zeichen.
_________________ PROGRAMMER: A device for converting coffee into software.
|
|
Niko S. 
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: Sa 18.07.09 19:04
Der code ist der Selbe..
Habs auf Shortstring geändert bis auf "name" weil dort ja länge angegeben ist..
Hab mal eine mapfile hochgeladen
Einloggen, um Attachments anzusehen!
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 19.07.09 06:16
Xentar hat folgendes geschrieben : | | 1. Runtime error mit einem FileStream? |
Runtime error 216 ist eine AccessViolation.
| Zitat: | | steht in dem Thread im den ich verlinkt habe im ersten post. |
Ich liebe es, wenn man sich seine Informationen zum helfen erst überall zusammensuchen muss.
|
|
jaenicke
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 19.07.09 08:00
In deinem Record ist ein dynamisches Array enthalten, wie soll das funktionieren? Das ist ja nur ein Pointer (4 Byte)...
|
|
Niko S. 
      
Beiträge: 566
Erhaltene Danke: 10
Win 7, Ubuntu
Lazarus, Turbo Delphi, Delphu 7 PE
|
Verfasst: So 19.07.09 08:09
Ich habs auch mit nem statischen Array probiert aber irgendwie funkioniert das auch nicht...
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:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;
type TTile = packed record Ground : LongInt; Mask : LongInt; Anim : LongInt; Mask2 : LongInt; M2Anim : LongInt; Fringe : LongInt; FAnim : LongInt; Fringe2 : LongInt; F2Anim : LongInt; Type1 : Byte; Data1 : LongInt; Data2 : LongInt; Data3 : LongInt; String1 : ShortString; String2 : ShortString; String3 : ShortString; Light : LongInt; GroundSet : Byte; MaskSet : Byte; AnimSet : Byte; Mask2Set : Byte; M2AnimSet : Byte; FringeSet : Byte; FAnimSet : Byte; Fringe2Set : Byte; F2AnimSet : Byte; end;
TMap = packed record Name : String[20]; Revision : Integer; Moral : Byte; Up : Integer; Down : Integer; Left : Integer; Right : Integer; music : ShortString; BootMap : Integer; BootX : Byte; BootY : Byte; Shop : Integer; Indoors : Byte; Tile : array[0..30] of array[0..30] of TTile; NPC : array[1..15] of Integer; SpawnX : array[1..15] of Byte; SpawnY : array[1..15] of Byte; Owner : String; Scrolling : Byte; Weather : Integer; end;
TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); private public end;
var Form1: TForm1; Map : TMap;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var Mapfile: TFileStream; begin MapFile := TFileStream.Create('C:\Users\Kami\Desktop\Server\Maps\map1.dat', fmOpenRead + fmShareDenyWrite); try MapFile.read(Map, SizeOf(Map)); finally FreeAndNil(MapFile); end; Memo1.Lines.Add(Map.Name); Memo1.Lines.Add(IntToStr(Map.Revision)); end;
end. |
So sieht das im Moment aus
|
|