anoniem Geplaatst: 11 oktober 2003 Delen Geplaatst: 11 oktober 2003 Weet iemand de code voor 'readln' in grafische modus? Ik kan in textmode wel gewoon readln gebruiken, maar hoe doe ik dat in Grapische Modus? Is er iemand die zich nog iets van die jaren kan herinneren :P ? [readln] [code:1:b5b81fc059] Program readln_1; USES CRT; VAR variable1 : string; BEGIN writeln('Enter Value for variable1: '); readln(variable1); writeln('variable is ',variable1,' '); END. [/code:1:b5b81fc059] [graph] [code:1:b5b81fc059] PROGRAM read_in_graph; USES Graph; BEGIN ????? END. [/code:1:b5b81fc059] Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Heb je zoiets al geprobeerd?[code:1:37546d8599] program ReadLn1; uses Graph; var Variable1: string; begin InitGraph(D8bit, m640x480, ''); if GraphResult <> grOK then begin WriteLn('Graphics mode 640x480x256 not supported'); Halt; end; SetTextStyle(DefaultFont, HorizDir, 1); OutTextXY(1, 1, 'Enter a value for Variable1:'); ReadLn(Variable1); OutTextXY(1, 20, 'Variable1 = '+Variable1); OutTextXY(1, 40, 'Hit Enter to continue...'); ReadLn; CloseGraph; end. [/code:1:37546d8599] Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Nee Kamikaasje, kijk het probleem is dat je dan weer terug gaat naar de textmode, en dan krijg je dwars door je GUI een vage balk hoe meer je typt hoe langer de balk wordt. Ik kon in tutorials en boeken ook niks vinden terwijl dit toch redelijk belangrijk is... Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Probeer dit eens? [code:1:7bb5019e61] program ReadLn1; uses Graph; var Variable1: string; procedure ReadTextXY(X, Y: byte; var S: string); var SLen: byte absolute S; Ch: char; begin repeat OutTextXY(X, Y, S+'_ '); Ch := ReadKey; case Ch of ^H: if Length(S) > 0 then SLen := SLen - 1; ' '..'~', #128..#254: S := S + Ch; end; until Ch = ^M; end; begin InitGraph(D8bit, m640x480, ''); if GraphResult <> grOK then begin WriteLn('Graphics mode 640x480x256 not supported'); Halt; end; SetTextStyle(DefaultFont, HorizDir, 1); OutTextXY(1, 10, 'Enter a value for Variable1:'); Variabele1 := ''; ReadTextXY(1, 20, Variable1); OutTextXY(1, 30, 'Variable1 = '+Variable1); OutTextXY(1, 40, 'Hit Enter to continue...'); ReadLn; CloseGraph; end. [/code:1:7bb5019e61] Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 hmm..... ik zal je zo zeggen of ik het snap Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Klopt niet. a) [code:1:25fb8e09b6]USES CRT, GRAPH[/code:1:25fb8e09b6] b) [code:1:25fb8e09b6]^H: if Length(S) > 0 then SLen := SLen - 1; [/code:1:25fb8e09b6] geeft de volgende melding: 'Error 91: ":=" expected.' als ik daar [code:1:25fb8e09b6]^H: if Length(S) > 0 then SLen := SLen := - 1; [/code:1:25fb8e09b6] van maak zegt de Compiler Constant out of range. Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 (A) Dit kan kloppen. Ik doe dit hier uit m'n hoofd omdat ik Turbo Pascal hier niet geinstalleerd heb. Maar ik neem aan dat je zelf ook een beetje meedenkt. (B) Snap ik niet. Die regel is goed. SLen := SLen - 1; vermindert de lengte van S met 1 en verwijdert dus effectief de laatste letter van S (^H is namelijk de backspace key). Waar exact in die regel geeft ie de foutboodschap? Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 in pascal is ^ toch een pointerderefentie, ik denk niet dat ie dat lekker vind dan. Kan je niet beter de numerieke waarde opzoeken en hierop testen? Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Als je ^ achter een pointervariabele naam zet dan is het een pointer reference. Je kunt ^H vervangen door #8 maar ^H moet ook werken. Hij geeft ook geen foutmelding op ^M neem ik aan? Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 [quote:c6a23a1ab9="Kamikaasje"] Hij geeft ook geen foutmelding op ^M neem ik aan?[/quote:c6a23a1ab9] Geen idee, hij komt niet verder dan de 1ste melding. :< Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 [b:0b4b329f7d][color=red:0b4b329f7d]*AndreasV's pascal is een beetje weggezakt na een aantal weken Java zonder pointers en vooral veel c++ met functionpointers :oops: [/color:0b4b329f7d][/b:0b4b329f7d] Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 [code] SLen := SLen := - 1; [code] Dit mag nooit in pascal he, in C overigens wel :-P Welke regel geeftie die error precies? Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Hehehehe, ja, ik moest eerst ook weer even diep graven, maar het komt langzaam weer allemaal boven :) Als ik me goed herinner heeft Borland een paar jaar terug TurboPascal freeware gemaakt. Ik zal eens op hun site zoeken of ik een download link kan vinden. Weer eens even installeren. Lijkt me wel geinig. Ben inmiddels in een behoorlijk nostagische bui aanbeland :) Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Ok, ik heb me even uitgeslooft :) Allereerst heb ik Turbo Pascal 5.5 gedownload van Borland's website, hier: http://community.borland.com/article/0,1410,20803,00.html Vervolgens de code gecompileerd (zaten inderdaad een paar typfoutjes in). Deze code werkt: [code:1:b063aba922] program ReadLn1; uses Graph, Crt; var GraphDriver: integer; GraphMode: integer; Variable1: string; procedure ReadTextXY(X, Y: byte; var S: string); var SLen: byte absolute S; Ch: char; begin repeat OutTextXY(X, Y, S+'_ '); Ch := ReadKey; case Ch of ^H: if Length(S) > 0 then SLen := SLen - 1; ' '..'~', #128..#254: S := S + Ch; end; until Ch = ^M; end; begin GraphDriver := VGA; GraphMode := VGAhi; InitGraph(GraphDriver, GraphMode, ''); if GraphResult <> grOK then begin WriteLn('Graphics mode 640x480x256 not supported'); Halt; end; SetTextStyle(DefaultFont, HorizDir, 1); OutTextXY(1, 10, 'Enter a value for Variable1:'); Variable1 := ''; ReadTextXY(1, 20, Variable1); OutTextXY(1, 30, 'Variable1 = '+Variable1); OutTextXY(1, 40, 'Hit Enter to continue...'); ReadLn; CloseGraph; end. [/code:1:b063aba922] en dit getest op Windows XP in een DOS box, en het werkt nog ook, graphics mode and all !!! (Had ik eerlijk gezegd niet gedacht dat dit nog zou werken in XP, zeker niet in graphics mode :) Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Voor de nieuwsgierigen onder ons, waar zat nu de fout, in welke regel? Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 Hehehe, zoek de verschillen :) Maaruh, ik had ergens "Variabele1" i.p.v "Variable1" getypt. Bovendien moeten de parameters van InitGraph variabelen zijn (constanten mag niet). Tis ook alweer zo lang geleden :) Quote Link naar reactie
anoniem Geplaatst: 11 oktober 2003 Auteur Delen Geplaatst: 11 oktober 2003 dat krijg je hé als je geen hungarian-notatie gebruikt ;). Quote Link naar reactie
anoniem Geplaatst: 12 oktober 2003 Auteur Delen Geplaatst: 12 oktober 2003 Even nog 'n klein beetje mooier gemaakt (ik kon het niet laten) :D[code:1:3e8917704e]program ReadLn1; uses Graph, Crt; const Backspace = #8; Enter = #13; var GraphDriver: integer; GraphMode: integer; Variable1: string; procedure ReadTextXY(X, Y, MaxLen: byte; TextLabel: string; var S: string); var SLen: byte absolute S; SWidth: integer; SHeight: integer; CursorWidth: integer; Key: char; begin OutTextXY(X, Y, TextLabel); X := X + TextWidth(TextLabel); CursorWidth := TextWidth('_'); SWidth := TextWidth(S); SHeight := TextHeight(S); SetFillStyle(1, Black); repeat Bar(X, Y, X+SWidth, Y+SHeight); OutTextXY(X, Y, S+'_'); Key := ReadKey; case Key of Backspace: if Length(S) > 0 then begin SWidth := TextWidth(S)+CursorWidth; SLen := SLen - 1; end; ' '..'~', #128..#254: if SLen < MaxLen then begin S := S + Key; SWidth := TextWidth(S)+CursorWidth; end; end; until Key = Enter; end; begin GraphDriver := VGA; GraphMode := VGAhi; InitGraph(GraphDriver, GraphMode, ''); if GraphResult <> grOK then begin WriteLn('VGA graphics mode not supported'); Halt; end; Variable1 := ''; SetTextStyle(DefaultFont, HorizDir, 1); ReadTextXY(1, 10, 30, 'Enter a value for Variable1: ', Variable1); OutTextXY(1, 30, 'Variable1 = '+Variable1); OutTextXY(1, 50, 'Hit Enter to continue...'); ReadLn; CloseGraph; end.[/code:1:3e8917704e] Quote Link naar reactie
anoniem Geplaatst: 12 oktober 2003 Auteur Delen Geplaatst: 12 oktober 2003 Ben hem aan het overtypen (btw ik gebruik TP7 niet 5.5 maar oke zoveel verschillen zijn er niet). Is er niet een standaard ReadTexXY opdracht in TP in Graphische mode? Vind ik beetje dom gedaan. Maar oke. Bij de 'nieuwste code' krijg ik mijn eigen foutmelding (VGA not supported); Als ik de grOK check weglaat, krijg ik 'Grapics not Initialized (Use InitGraph)' :-? Quote Link naar reactie
anoniem Geplaatst: 12 oktober 2003 Auteur Delen Geplaatst: 12 oktober 2003 Ik vond alleen 5.5 gratis op de Borland website. Kweet niet of 7.0 ook inmiddels gratis is. Maar 't scheelt inderdaad niet veel. Waarom typ je t over??? Doe toch een copy&paste. Das toch veel sneller, en minder kans op typvouten :) [i:0644d4f3b9][color=green:0644d4f3b9]> Is er niet een standaard ReadTexXY opdracht in TP in Graphische mode? [/color:0644d4f3b9][/i:0644d4f3b9] Voor zover ik weet niet. De Graph unit is altijd een beetje een ondergeschoven kindje geweest. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen