Kezdőoldal » Számítástechnika » Programozás » Free Pascal-ban írt, Windows...

Free Pascal-ban írt, Windows alatt lefordított program ne a Dos ablakban fusson, mit lehet tenni? (bővebben lent)

Figyelt kérdés

Szeretném, ha a program a Windows-ban futna és nem az emulált DOS ablakban, mert ekkor megváltozik a kódtábla-kiosztás (gondolom CP437 lesz mint a régi szép időkben), és az ékezetes billentyűkre nem reagál, a többire igen, példaként beraktam (alább a példaprogram). Gondolom, valamilyen módon GUI-t kellene tenni rá, mi ennek a legegyszerűbb módja? Nem szeretnék semmilyen különleges grafikát, csak hogy egy grafikus ablakban fusson a program, tehát nem akarok szövegdobozokat, se egerészést, semmit, csak hogy úgy fusson mint egy Win32 alkalmazás és ne a cmd.exe által fusson mint egy régi DOS program. Simán Free Pascal alatt meg lehetne oldani? (Lazarust sem szeretnék használni). Ha ASCII kódjuk szerint adnám meg az ékezetes betűket, akkor sem működnének. Ha megoldható rendkívül egyszerűen Lazarus alatt, akkor megpróbálkoznék vele, bár Lazarus-t sem használtam még soha.

Ha a -WG+ paraméterrel fordítottam a programot, akkor - gondolom mivel grafikát nem tartalmaz - elindul ugyan, de csak a feladatkezelőben lehet látni és persze jól leterheli a rendszert, hiszen a háttérben fut és a végtelenségig várja a billentyűleütéseket, de ugye hiába...

Valaki képessé tudná nekem tenni ezt a programot, hogy normálisan fusson Windows alatt, vagy valamilyen példaprogramot tudna mutatni ami alapján át tudnám ezt alakítani? A legeslegegyszerűbb megoldás érdekelne, nem szeretnék grafikus tervezéssel foglalkozni, vak vagyok és sosem foglalkoztam ilyesmivel, csak tudom hogy van GTK meg QT meg hasonlók, de a legegyszerűbb példaprogram aminek forráskódját olvastam is elég bonyolult volt... Egyszerű megoldás létezik?


Uses CRT; {WinCRT-t nem használhatom, mert a Readkey stb nem működne}

Var

Ch : Char;

Begin

ClrScr;

WriteLn('Kilépés: Enter gomb.');

Repeat

ch := ReadKey;

Case ch of

'a' : WriteLn('a');

'b' : WriteLn('b');

'c' : WriteLn('c');

'á' : WriteLn('á');

'Á' : WriteLn('Á');

'é' : WriteLn('é');

'É' : WriteLn('É');

'í' : WriteLn('í');

'Í' : WriteLn('Í');

'ö' : WriteLn('ö');

'Ö' : WriteLn('Ö');

'ő' : WriteLn('ő');

'Ő' : WriteLn('Ő');

'ű' : WriteLn('ű');

'Ű' : WriteLn('Ű');

'ó' : WriteLn('ó');

'Ó' : WriteLn('Ó');

'ú' : WriteLn('ú');

'Ú' : WriteLn('Ú');

End;

Until(ch = #13);

End.



2015. jan. 19. 12:45
1 2
 11/19 A kérdező kommentje:

A kódos változat most működik (kódokkal megadva az ékezeteket), egy másik gépen, Windows XP alatt próbáltam délelőtt és ott nem működött, itt most Windows 7 32 bit van.

Jegyzettömbben írtam a programot, mert a Free Pascal beépített környezetét nem akarta nekem támogatni a beszélőprogram, ami felolvassa a képernyő tartalmát, szóval jegyzettömbbel elmenteni és meghívni az fpc.exe-t egyszerűbb volt.


Éppen azon gondolkodtam, hogy mi válthatta ki a számomra arrogáns választ, mert én nem éreztem úgy, hogy tudálékosan beszéltem volna.

2015. jan. 19. 15:35
 12/19 coopper ***** válasza:

Szia.


Konzolos alkalmazást ablakos alkalmazássá átirni nem egyszerű dolog.


Erre egyetlen egy módszert ismerek ami az egyszerű programoknál működhet :


A Borland Pascal for Windows (BP7-ben) le lehet forditani az egyszerűbb konzolos alkalmazásokat egyszerüen csak a crt unitot át kell irni wincrt-re és kész is a dolog (Biztos lesz olyan alakmazás aminél nem fog működik - és a létrejött windowzos ablak is egy egyszerű ablak lesz).


Innen letöltheted az általad irt programot (exe és pas a zip-ben) : [link]


Sok sikert.

Üdv.

2015. jan. 19. 20:51
Hasznos számodra ez a válasz?
 13/19 ejbenjaro ***** válasza:
Ha már Free Pascalt használsz én mégis a Lazarust ajánlanám szerkesztőnek. Nem csupán „ablakos” programok írására használható. Ha a windows parancssorában nem jelennek meg rendesen az ékezetes karakterek, a Lazarusban be tudod állítani a forráskód karakterkódolását (Jobb klikk a forráskódszerkesztő ablakban, a felugró menüben válaszd a File Settings menüpontot, majd ennek az Encoding almenüjét, aztán pedig válaszd ki a CP852 kódlapot). Kódlap állítás után mented a programot, majd lefordítod és elvileg hibátlanul jeleníti meg a „DOS” ablakban az ékezetes karaktereket is.
2015. jan. 19. 21:37
Hasznos számodra ez a válasz?
 14/19 A kérdező kommentje:

Köszönöm szépen a válaszokat.

Itt (Free Pascal 2.6.4 alatt a WinCRT használatától nemhogy nem lesz ablakos a program, de valahogy a readkey sem akar működni. :-) Most már hogy működik konzolban is a kódokkal a program, azért jobb a helyzet.

2015. jan. 19. 21:46
 15/19 anonim ***** válasza:
Ott a hiba, a jegyzettömb más karakterkódolást használ (állítható, hogy Windows-1250, UTF-8 vagy Unicode), mint a FreePascal. Ami a jegyzettömbben ékezetes magyar karakter, az FreePascalban valami egészen más.
2015. jan. 20. 12:49
Hasznos számodra ez a válasz?
 16/19 anonim ***** válasza:

A Wincrt-ről meg egy megjegyzés:

"The wincrt unit provides some auxiliary routines for use with the graph unit, namely keyboard support. It has no connection with the crt unit, nor with the Turbo-Pascal for Windows WinCrt unit. As such, it should not be used by end users. Refer to the crt unit "

Ez a Free Pascal helpjéből van idézve.

Régen (értsd: Borland Pascal alatt, ami még Win3.X-re készült) a WinCRT unit arra szolgált, hogy a CRT-hez hasonló funkciókat ellásson, de egy Windows-stílusú ablakban. Tulajdonképpen ugyanúgy "parancssori" alkalmazás volt, csak mivel a Win3.1-ben nem volt Windows parancssor (csak DOS), ezért a sima konzolos programokat ez a WinCRT egy Windows-stílusú szöveges ablakban jelenítette meg. (Remélem, érthetően fogalmaztam. Aki dolgozott vele, tudja, miről van szó. ;-) Én még XP alatt is ezt preferáltam, ha nem volt szükség GUI-ra, ugyanis sokkal pofásabb, mint az a fekete parancssor.)

Viszont Free Pascal-ban a WinCRT teljesen másra való. Arra, hogy ha a graph unitot használod, akkor megkönnyítse a billentyűzetkezelést.

2015. jan. 20. 12:56
Hasznos számodra ez a válasz?
 17/19 A kérdező kommentje:
Nálam a forráskód akkor sem változik, ha a notepad++ esetén átállítom az encoding-ot 1250 kódlapra. Én úgy tudtam, hogy a sima Windows-os jegyzettömb csak ansi kódolást támogatott, sőt, sokszor panaszkodott időnként ha web-ről kimásoltam valamit, hogy az unicode karakterek el fognak veszni mentéskor.
2015. jan. 20. 13:48
 18/19 anonim ***** válasza:

Még valamikor, a Win95/98 idején tényleg úgy volt.

Az XP Jegyzettömbje már képes volt Unicode/UTF-8 kódolásokat is kezelni.

Az ANSI egyébként a Jegyzettömb terminológiájában a telepített Windows kódlapját - ami jelen esetben 1250 - jelenti.

Ha szerkesztés közben állítod a Notepad++-ban, persze, hogy nem látsz változást, mert az már van annyira intelligens program, hogy átalakítsa a begépelt szöveget automatikusan a megadott (új) kódlapnak megfelelően.

2015. jan. 20. 14:02
Hasznos számodra ez a válasz?
 19/19 A kérdező kommentje:
Értem, köszönöm a választ.
2015. jan. 20. 14:22
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!