![]() |
mem aus TurboPascal
Hi Leutz!
Ich bin vor kurzem im Internet auf eine Facharbeit zum Thema computergenerierte Hologramme gestoßen, bei welcher auch der dazugehörige Pascalcode dabei ist. Da ich auch mal in TurboPascal programmiert hab, dachte ich mir, ich portiere das Ganze auf Delphi. Doch dann bin ich leider an dem Array "mem" hängen geblieben, von dem ich nicht weiß, wie ich das am klügsten in Delphi schreibe. :( MfG, Sven |
Re: mem aus TurboPascal
Fragst du wie man das Array deklarieren soll?
Wie ist das Array denn im Pascal Code deklariert? Ist das ein dynamisches Array?
Delphi-Quellcode:
oder ein statisches?
var
mem: array of string;
Delphi-Quellcode:
Florian
var
mem: array[0..100] of string; |
Re: mem aus TurboPascal
Das Array ist eines, das von Pascal zur Verfügung gestellt wird. Ich schau mal schnell, ob ich irgendwo noch Pascal rumkurven hab... (wegen der Hilfe) :?
Im übrigen gibt's dynamische Arrays erst ab Delphi 4... ;) |
Re: mem aus TurboPascal
Delphi-Quellcode:
Vergesse ich manchmal, da ich nie richtig mit einer Delphi Version unter 7.0 gearbeitet habe.
Im übrigen gibt's dynamische Arrays erst ab Delphi 4...
Welche Werte stehen denn in dem Array? |
Re: mem aus TurboPascal
Hab mal schnell die Pascal Hilfe ausgebuddelt:
Zitat:
|
Re: mem aus TurboPascal
Schein eine Zugriff auf den Speicher des Programms darzustellen. Da kenne ich mich leider nicht aus. Ich denke aber mit einem MemoryStream dürfte man das ähnlich handhaben können.
Florian |
Re: mem aus TurboPascal
Werd ich dann mal austesten... Danke soweit mal... :-D
|
Re: mem aus TurboPascal
Mem dient zum direkten setzen und lesen des Speichers. Z.B. :
Delphi-Quellcode:
Ist also wohl kaum zu empfehlen.
mem [$1000:$1009] := 5; oder MyVar := mem [$1000:$1009]
|
Re: mem aus TurboPascal
Zitat:
Mem wurde dazu benutzt, an bestimmten Speicheradressen Werte zu lesen und schreiben, häufig in den Videospeicher oder den Tastaturpuffer o.ä. Zeige mal die betreffenden Stellen im Quelltext, dann können wir dir ggf. sagen, was damit bezweckt wird und wie man es unter Windows abbilden kann. |
Re: mem aus TurboPascal
Aber gerne zeige ich die Stelle...
Delphi-Quellcode:
Ich hoff ich hab alle Consts, Vars und Types erwischt... und ich hoffe, dass ihr schlauer draus werdet, als ich.... :? die Daten die hier jetzt berechnet wurden sind zur Berechnung des Interferenz Bildes notwendig... doch das ist ne andere Geschichte... äh... Prozedur (musste sein) :wink:
(*
Legende: //...: Meine Kommentare {...}: Kommentare des Autors *) // globale Vars / Consts / Types const entf=40; {z-Koordinate des Objekts Std: 40} Staffelung=0; {z-Koordinatendifferenz von einem Buchstaben zum nächsten Std: 0} Wort='Laser'; wortx=0.08; worty=-0.17; {Koord. des Wortbeginns Std: 0.08, -0.17} breite=0.16; hoehe=0.17; {Größe eines 8*8 Bit Punkterasters Std: 0.16, 0.17} Abstand=0.17; {Buchstabenabstand Std: 0.17} type punkttyp=array[1..3] of real; vars p: array[0..200] of punkttyp; {Array zum Speichern d. Punktkoordinaten} punkte: integer; {Anzahl der Punkte für das Wort} // Das Objekt der Begierde ist diese Funktion.... function objekt: integer; {Wandelt die Zeichenkette in Punkteraster um} const segcg: word=$F000; ofscg: word=$FA6E; {Segment und Offsetadresse wo man das Rasterpunktmuster herauslesen kann} var i, j, bnr, r, sp: integer; {bnr: Buchstabennr; r: Reihe; sp: Spalte} asc, zbyte, zpot: byte; {asc: ascii-Code d. Zeiches; zbyte: Zeile d. binären Punkterasters; zpot: zur Kontrolle ob Bit gesetzt oder nicht} hstr: string; {Aktuelles Zeichen} begin punkte:=0; for bnr:=0 to length(wort)-1 do begin {Für jeden Buchstaben die Schleife durchlaufen} hstr:=copy(wort,bnr+1,1); {hstr: Aktueller Buchstabe} asc:=ord(hstr[1]); {asc: Ascii-Wert d. Buchstaben} for r:=0 to 7 do begin {jeder Buchstabe hat 8 Zeilen, wobei jede Zeile der Reihe nach ausgelesen wird} //Hier ist das Mem Zeugs if asc<128 then begin {diese Zeile auslesen} ofscg:=$FA6E; segcg:=$F000; zbyte:=mem[segcg:ofscg+8*asc+r]; end else begin ofscg:=mem[0:4*$1F]+256*mem[0:4*$1F+1]+8*(asc-128)+r; segcg:=mem[0:4*$1F+2]+256*mem[0:4*$1F+3]; zbyte:=mem[segcg:ofscg]; end; zpot:=128; {=10000000b} for sp:=0 to 7 do begin {Jedes Bit durchlaufen} if (zbyte and zpot)=zpot then begin {Falls Bit gesetzt dann Punkt speichern} inc(punkte); {Punktanzahl um eins erhöhen} p[punkte,1]:=wortx+abstand*bnr+sp*breite/8; {=Objektbeginn+ Zeichenabstand* Zeichen + Punktnummer*Zeichenbreite/8 (8 Punkte pro Zeichenzeile)} p[punkte,2]:=worty+r*hoehe/8; {Objektbeginn + Pixelreihe* Höhe/8} p[punkte,3]:=entf+staffelung*bnr; {Abstand in z-Richtung + Staffelung} end; zpot:=zpot div 2; {Einser in Binärzahl rückt um 1 Stelle nach rechts} end; end; end; objekt:=punkte; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz