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
 1/19 uno20001 ***** válasza:
100%

Ez egy konzolos alkalmazás -> ergo konzolban fog futni. A konzol, pedig egy sima szöveges felület. Az pedig nem DOS ablak, hanem konzol.


U.I.: Mi a baj azzal, hogy egy konzolban fut?

2015. jan. 19. 13:44
Hasznos számodra ez a válasz?
 2/19 anonim ***** válasza:
100%

Kezdjük pár orbitális nagy szakmai tévedéssel!


Feltételezem, hogy a win32-es Free Pascal-t használod, és nem a DOS alattit. Amennyiben mégis utóbbit használnád, sürgősen térj át a Win32-es verzióra.


Amiben a programod fut, az nem egy DOS ablak, és végképp semmi nincs emulálva. Erről te magad is meggyőződhetsz: ctrl+alt+del-re előjön a feladatkezelő, na és ott, ha DOS-os alkalmazást futtatsz, a folyamatok között megjelenik egy NTVDM.exe. Ez emulálja a DOS-t.

Ha te egy FP-ban lefordított alkalmazást futtatsz, akkor natív Windows programot fogsz kapni. Semmiféle DOS alkalmazás nincs itt.

Ja, hogy parancssorban fut? Igen. (De nem a cmd.exe közreműködésével, szintén megnézheted, amikor fut, sehol nem fogsz a futó folyamatok között cmd-t találni.)

A Windows alkalmazások ugyanis kétfélék lehetnek: parancssori alkalmazások, valamint ablakos alkalmazások. (Illetve directx/opengl-alapúak, de ez már részletkérdés.)

Hiába néz ki úgy, mint a DOS, ez csak annyira DOS, mint amennyire a Linux parancssora az: azaz semennyire.

A kódlap pedig nem 437-es, hanem 852-es.

Ha neked a kódok alapján sem működik (próbáltad egyáltalán?), és mondjuk a writeln(#130); nem egy kis é-betűt ír ki, akkor valami az ablak karakterkészleténél van átállítva.


Természetesen lehet ablakos alkalmazásokat is csinálni Free Pascalban (Lazarus, GTK és egyebek nélkül), mondjuk a Windows API felhasználásával. De ha egy GTK-példaprogram neked bonyolult, akkor egy WinAPI-t kihasználó Pascal-programtól egyenesen a falnak mész.

2015. jan. 19. 13:50
Hasznos számodra ez a válasz?
 3/19 A kérdező kommentje:

A kérdés első szava, hogy Free Pascal tehát nem DOS-os Pascal.

Pár sor leírásával vakon tudok ablakos programot csinálni, vagy a grafikát meg kell tervezni?

2015. jan. 19. 13:59
 4/19 anonim ***** válasza:

Már miért ne létezne DOS-os freepascal?

[link]

Itt van a letöltések között. Még os/2 + gameboy verzió is van belőle. :->


Egyébként szerintem is hanyagold egy a guit, mert ez a kicsiny programod kb. 5-ször lesz hosszabb, és egy csomó új függvénynevet meg technikát kell megtanulnod közben.

2015. jan. 19. 14:01
Hasznos számodra ez a válasz?
 5/19 A kérdező kommentje:
A többiben biztosan igazad van, hogy tévedtem.
2015. jan. 19. 14:02
 6/19 A kérdező kommentje:
Igen, tényleg van DOS-os változata, de manapság nem sokan futtatnak még FreeDOS-t se. :-)
2015. jan. 19. 14:03
 7/19 A kérdező kommentje:
Egyébként ha csak a 852 - 1250 kódlap lenne a különbség (A Windows úgy tudom 1250-es kódlapot használ), akkor miért csak a hosszú ű-re reagál helyesen a futó program, annak is máshol kellene lennie a kódtáblán.
2015. jan. 19. 14:08
 8/19 anonim ***** válasza:

"A kérdés első szava, hogy Free Pascal tehát nem DOS-os Pascal."

A Free Pascal-nak van DOS-portja is. Azzal, hogy Free Pascal, még nem mondtad, hogy a Windows-portot használod.


"Igen, tényleg van DOS-os változata, de manapság nem sokan futtatnak még FreeDOS-t se. :-)"

Oké, mented, ami menthető egy szakmai baki után, egy újabb szakmai bakival.

Ahhoz, hogy a DOS-alapú Free Pascal-t használd, nem szükséges MS-DOS-t használnod, de még FreeDOS-t vagy DrDOS-t sem. A Windows ugyanis képes futtatni (legalábbis a 32 bites Windows-ok), mégpedig a már említett NTVDM segítségével. Na, azzal tényleg DOS alapú programot írnál.


De a fő kérdés: kipróbáltad? A writeln(#130); mit ír ki?


"Pár sor leírásával vakon tudok ablakos programot csinálni, vagy a grafikát meg kell tervezni?"

Ha tényleg csak a Free Pascal eszközeire hagyatkozol, akkor pár képernyőoldalt tesz ki csak az, hogy egy ablakot kirajzolj.

Én programoztam ezen a meglehetősen alacsony szinten, közvetlenül piszkálva a WinAPI-t, és nem hazudok azzal, hogy baromira bonyolult. Igaz, az még Borland Pascalban volt, és legalább már 10 éve annak, de a WinAPI programozása azóta sem lett könnyebb. (Megjegyezném, hogy anno az a könyv, amiből ezt a technikát megtanultam, kb. 400 oldalas volt. Annak nagy része csak arról szólt, hogy hogy hozzak létre ablakot, hogy kezeljem az úgynevezett üzeneteket, hogy rajzoljak ki gombokat, gördítősávot, stb, stb.)

Ha tényleg grafikus felületű alkalmazást akarsz készíteni, akkor erősen javallott a Lazarus használata. Ott 5 perc alatt összedobod azt, ami egy több órás meló WinAPI-ban.

"a grafikát meg kell tervezni?"

Ha a "grafika" ablakokból, illetve szabvány Windows-vezérlőkből áll, akkor - Lazarusban - semmit nem kell tervezned, odahúzod a formra, ami kell, és kész.


De én is azt mondom, kezdésnek felesleges még GUI-t használnod, látványos meg minden, de a programozás tanulásához - legalábbis a kezdeteknél - felesleges.

2015. jan. 19. 14:18
Hasznos számodra ez a válasz?
 9/19 A kérdező kommentje:

Köszönöm a válaszokat. Úgy gondolom, hogy teljesen felesleges arrogánsan válaszolgatni, mert elviszi a lényegről a témát, mint például húúúúú hatalmas nagy szakmai baki az, hogy a kérdésbe nem írtam be, hogy Windows alatt futó Free Pascal-t használtam, ha meg most azt írom hogy a DOS alatti fordítónak biztosan nem tudnám megadni a -WC paramétert, akkor is jönnnek hogy húú újabb baki...

Ego-boosting, semmi egyéb és nincs sok értelme. :-)

Nem állítottam hogy amit a writeln-röl írtál, ne működne, mást állítottam, amit a futó program nem produkált.

Amit a grafikus programozásról részletesen írtál, azt köszönöm.

2015. jan. 19. 14:33
 10/19 anonim ***** válasza:
100%

Ez nem arrogancia. Csupán kijavítottam pár szakmai tévedést. Ha ez rosszul esett, akkor bocs.

Egyébként meg tévedsz: nem teljesen lényegtelen, hogy milyen oprendszerhez készült Free Pascal-t használsz, hiszen ez mondjuk döntő fontosságú azon kérdést illetően, hogy lehet-e rajta ablakos felületű programot írni.

Futottam én már bele olyan problémába, hogy valaki nem tudta a program kimenetét átirányítani. A hiba oka egyszerűen az volt, hogy a DOS-verziót használta, és DOS-ra fordított. Csak azért jegyeztem meg, mert tényleg nem lényegtelen.

Ami meg azt illeti: én egy olyan ember vagyok, aki az "amilyen az adjisten, olyan a fogadjisten" elvet követi. Ha te fentről, a magas lóról beszéltél (nekem eléggé úgy tűnt), akkor én is hajlamos vagyok stílusban alkalmazkodni a kérdéshez/válaszhoz.

Az egómat meg elhiheted, nem azzal akarom növelni, hogy "jaj, most kifejthettem, hogy a parancssor meg a DOS nem ugyanaz". Nincs is rá szükségem, én tisztában vagyok vele, hogy mit tudok, és mik a korlátaim. Ezt nem nagyképűségből mondom, csak szerintem túl a 30-on, azok után, hogy 15 éve keményen benn vagyok az informatikai szférában, szerintem kijelenthetem azt, hogy tudom, hogy mit tudok, és hol vannak pillanatnyilag a határaim.

De a szópárbaj tényleg nem vezet sehová.


Szóval: kipróbáltad, hogy a writeln(#130); mit ír ki? Mert ha nem é-t, akkor valami gebasz van a karakterkészlettel, amit a parancssori programok használnak.

Ha rendesen kiírja, akkor valami más lehet a probléma.

A Free Pascal beépített fejlesztő környezetét használod, vagy netán valami mást? Mert ha mondjuk Jegyzettömbben, vagy Notepad++-ban írod meg a Pascal-forrást, és azt elmented (jobb esetben Windows-1250, rosszabb esetben UTF-8 kódolással), akkor azt a 852-es kódlapot használó programod evidens, hogy nem fogja normálisan kezelni.

2015. jan. 19. 15:17
Hasznos számodra ez a válasz?
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!