start/uruchom/cmd?
Tak tez uruchamialem.
Nic sie nie dzieje dokladnie tak samo jakbym nacisnal tylko Enter.
--
Szczepan
--
Artur
--
Szczepan
przechwyć błędy:
function main()
//deklaracje zmiennych
...
blkerror := { |berr| deferror( berr ) }
errorblock( blkerror )
....
errorblock(blkerro)
return nil
functiot deferro( oError)
//tu sprawdzeniee przekazanego obiektu oError
//i wypisanie błędów
np.
? oerr:severity
? oerr:cargo
? oerr:subcode
? oerr:operation
return .f.
ewentualnie przesłanie wyniku wykonywanego programu do pliku
mayapp.exe > myerror.log
--
pozdrawiam, GG i SkyPe w X-nagłówku posta, e-mail: zmień wpw na wp
piotr
> functiot deferro( oError)
błąd w definicji funkcji
function deferror( oError)
Moj cxd.bat wyglada jak nizej.
Glownym programem startowym jest kfmenu.prg w nim na poczatku jest "function
main()".
w tymze programie w pierwszych liniach dalem
? PROCNAME(),PROCLINE()
ale po uruchomieni exeka nic sie nie wyswietla na ekranie.
Wyglada na to ze ten program main() w ogole sie nie uruchamia.
Moze moglbys mi na tej podstawie cos poradzic?
Jak sie uruchamie debuggera pod xHarbour, moze w ten sposob nieco sie
zorientuje?
DEL BUILD.TMP
ECHO kfmenu.prg >> BUILD.TMP
ECHO aptools.prg >> BUILD.TMP
ECHO aptools5.prg >> BUILD.TMP
ECHO kftools.prg >> BUILD.TMP
ECHO kfinit.prg >> BUILD.TMP
ECHO kfindex.prg >> BUILD.TMP
ECHO kfpoz.prg >> BUILD.TMP
ECHO kfserie.prg >> BUILD.TMP
ECHO kfpozk.prg >> BUILD.TMP
ECHO kf1f.prg >> BUILD.TMP
ECHO kf1ffunc.prg >> BUILD.TMP
ECHO kf1p.prg >> BUILD.TMP
.........itd ok 200 prg..................
ECHO kfl.EXE >> BUILD.TMP
ECHO C0W32.OBJ >> BUILD.TMP
ECHO common.lib >> BUILD.TMP
ECHO debug.lib >> BUILD.TMP
ECHO vm.lib >> BUILD.TMP
ECHO rtl.lib >> BUILD.TMP
ECHO gtwin.lib >> BUILD.TMP
ECHO lang.lib >> BUILD.TMP
ECHO rdd.lib >> BUILD.TMP
ECHO macro.lib >> BUILD.TMP
ECHO pp.lib >> BUILD.TMP
ECHO dbffpt.lib >> BUILD.TMP
ECHO dbfntx.lib >> BUILD.TMP
ECHO dbfcdx.lib >> BUILD.TMP
ECHO CW32.LIB >> BUILD.TMP
ECHO IMPORT32.LIB >> BUILD.TMP
ECHO hbsix.lib >> BUILD.TMP
ECHO codepage.lib >> BUILD.TMP
ECHO gtnul.lib >> BUILD.TMP
ECHO libnf.lib >> BUILD.TMP
ECHO ct.lib >> BUILD.TMP
ECHO HARBOUR_ := 'C:\XHARBOUR\BIN\HARBOUR.EXE /IC:\XHARBOUR\INCLUDE /B ' >>
BUILD.TMP
ECHO BCC32_ :=
'C:\BORLAND\BCC55\BIN\BCC32.EXE -c -O2 -d -tWC -X -IC:\XHARBOUR\Include;C:\Borland\BCC55\Include'
>> BUILD.TMP
ECHO ILINK32_ := 'C:\BORLAND\BCC55\BIN\iLink32.Exe -ap -Tpe -Gn
/LC:\XHARBOUR\Lib' >> BUILD.TMP
C:\XHARBOUR\MBUILD\MBUILD.EXE BUILD.TMP
DEL BUILD.TMP
--
Szczepan
Mysle ze twoje zalecenia co do przechwytywania bledow nie zadzialaly u mnie
dobrze gdyz przy kazdym rodzaju bledu dostaje taki sam komunikat:
"Uncoverable error 9002:No ERRORBLOCK() for error"
Poradz mi co moge w tej sprawie zrobic?
Twoje zalecenia zastosowalem tak:
Na poczatku programu glownego umiescilem:
blkerror := { |berr| deferror( berr ) }
errorblock( blkerror )
a w rejonie gdzie mam inne funkcje dalem:
************************
function errorblock(blkerro)
************************
return nil
************************
function deferror( oerr)
************************
//tu sprawdzeniee przekazanego obiektu oError
//i wypisanie błędów
? "111" + oerr:severity
? "222" + oerr:cargo
? "333" + oerr:subcode
? "444" + oerr:operation
return .f.
Zadek komunikat z function deferror nie pojawia sie.
--
Szczepan
> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał >
po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
gtdos lub gtwin,
po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
trzecie
co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
tekstowego, poprostu ostaw tak jak Ci podałem.
Nie mniej jednak zmień to gtnul na gtdos na początek, jak pójdzie możesz
sprawdzić czy pójdzie z gtwin
> po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
> gtdos lub gtwin,
gtwin tez tam jest linkowana pare wierszy przed gtnul
> po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
> trzecie
> co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
> tekstowego, poprostu ostaw tak jak Ci podałem.
>
Faktycznie zle zrozumialem twoj przyklad , teraz jest tak jak napisales.
Teraz wszystko dziala jeszcze gorzej.
Komunikaty (tylko cyferki) z funkcji deferror wyswietlaja sie wielokrotnie
(az do przepelnieniea) w czarnym okienku na tle aplikacji. Aplikacja nadal
dziala, nie ma juz komunikatu o bledzie itd.
Generalnie rzecz biorac przy moim stanie wiedzy o przechwytywaniu i
wyswietlaniu bledow najlepszym wyjsciem bylby malutki przykladzik (chodzacy)
z dzialajaca obsluga bledow.
Czy masz cos takiego pod reka, a moze wiesz gdzie cos takiego znalezc?
--
Szczepan
> Użytkownik "Piotr Kulinski" <piotr_k...@wpw.pl> napisał
>
>> po pierwsze linkujesz bibliotekę gtnul, proponuję zlinkowac zamiast niej
>> gtdos lub gtwin,
>
> gtwin tez tam jest linkowana pare wierszy przed gtnul
>
napisałem zamiast gtnul
>> po drugie funkcji errorblock nie nadpisujesz ona jest już w pakiecie, po
>> trzecie
>> co co wpisałeś te 111, 222 itd. przecież te zmienne nie wszystkie są typu
>> tekstowego, poprostu ostaw tak jak Ci podałem.
>>
> Faktycznie zle zrozumialem twoj przyklad , teraz jest tak jak napisales.
>
> Teraz wszystko dziala jeszcze gorzej.
> Komunikaty (tylko cyferki) z funkcji deferror wyswietlaja sie wielokrotnie
> (az do przepelnieniea) w czarnym okienku na tle aplikacji. Aplikacja nadal
> dziala, nie ma juz komunikatu o bledzie itd.
>
wiec widać, że program "pluje" coś na wyjście...
> Generalnie rzecz biorac przy moim stanie wiedzy o przechwytywaniu i
> wyswietlaniu bledow najlepszym wyjsciem bylby malutki przykladzik (chodzacy)
> z dzialajaca obsluga bledow.
> Czy masz cos takiego pod reka, a moze wiesz gdzie cos takiego znalezc?
Obsługę błędów mam dość mocno uwikłaną w kod aby ją wyciągać, podam Ci
przykład użycia obsługi błędów podczas otwierania tabeli.
Poza tym masz w RTL źródło errorsys.prg, w swojej aplikacji możesz też na
początku wywołać (w głównej funkcji main) procedure errorsys() która
zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
inicjować obsługę błędów w procedurze inicjującej INIT PROCEDURE
#include "error.ch"
#define OPEN_EXCLUSIVE .f.
#define OPEN_SHARED .t.
#define TESTING 0.1
#define HZ_TONE 1200
function main()
local cfile
// Set(_SET_SCOREBOARD,.F.)
// set(_SET_EXCLUSIVE,OPEN_EXCLUSIVE)
set(_SET_EXCLUSIVE,OPEN_SHARED)
setcursor(0)
/*
? memory(0)
? memory(1)
? memory(2)
? memory(3)
? memory(4)
? memory(5)
? memory(6)
? memory(7)
*/
cfile:="odbior.dbf"
// if (open_dbf(cfile,,30))
if (open_dbf(cfile))
alert(alias()+";czekam na decyzje...",{"zamknij"})
dbclosearea()
end
cfile:="test.dbf"
if (open_dbf(cfile,OPEN_EXCLUSIVE))
alert(alias()+";czekam...",{"zamknij"})
dbclosearea()
end
setcursor(1)
return nil
function open_dbf(cfile,ltryb,itries,calias)
local old_err,exitcode
if (ltryb==NIL)
ltryb:=set(_SET_EXCLUSIVE)
end
if (itries==NIL)
itries:=20
end
old_err := errorBlock()
errorBlock({|ob_err| err_net(ob_err,iTries,ltryb)})
begin sequence
DBUseArea(,nil,(cfile),(calias),ltryb,)
exitcode:=(!neterr())
recover
exitcode:=.f.
end sequence
errorBlock(old_err)
return exitcode
Function err_net(OB,iTries,lMode)
DO CASE
Case OB:GenCode==EG_NOALIAS
ob:cargo := ob:operation+";;bĺĹdny alias"
alert(ob:cargo)
break .f.
Case OB:GenCode==EG_DUPALIAS
if (Set(_SET_SCOREBOARD))
ob:cargo := ob:operation+";;próba otworcia repliki"
alert(ob:cargo)
end
break .f.
Case OB:GenCode==EG_CREATE
if (Set(_SET_SCOREBOARD))
ob:cargo := ob:filename+";;bĺćd tworzenia pliku"
alert(ob:cargo)
end
break .f.
Case OB:GenCode==EG_OPEN
if (!file(ob:filename))
ob:cargo := ob:description+";"+ob:filename
if (Set(_SET_SCOREBOARD))
alert(ob:filename+";;brak pliku do otwarcia")
end
break .f.
end
if ob:canretry .and.;
ob:oscode==EG_CORRUPTION .and. ;
ob:tries<=itries
ob:cargo:=savescreen(24,0,24,maxcol())
dispoutat(24,0,padc("otwieram "+ob:filename+"
("+ltrim(str(itries-ob:tries))+")",maxcol() ),"w+/r" )
tone(HZ_TONE,1);inkey(TESTING)
restscreen(24,0,24,maxcol(),ob:cargo)
if !(iTries==ob:tries .or. lastkey()==K_ESC)
NetErr(.f.)
return .T.
end
end
if (Set(_SET_SCOREBOARD))
NetErr(.t.)
ob:cargo := ob:filename+;
";;bĺćd otwarcia w trybie '"+;
iif(lMode,"shared","exclusive")+"'"
alert(ob:cargo)
end
break .f.
End
return .F.
> Poza tym masz w RTL źródło errorsys.prg, w swojej aplikacji możesz też na
> początku wywołać (w głównej funkcji main) procedure errorsys() która
> zainicjuje obsługę błędów. Jak już załapiesz o co chodzi bedziesz mógł
> inicjować obsługę błędów w procedurze inicjującej INIT PROCEDURE
Dzieki za informacje, sprobuje dalej sam wytestowac obsluge bledow.
Mam natomiast kolejne pytanie.
Tak jak pisalem na poczatku watku przekompilowalem aplikacje Clipperowa pod
xHarbour.
Wszystko dziala w miare normalnie. Nie wiem tylko jak poradzic sobie z
obsluga drukarki.
Przypuszczam ze istnieje napisane przez kogos jakas klasa ktora pobiera z
windows domyslna drukarke i na ta drukarke wysyla wydruk. Wydruki w tej
aplikacji sa w trybie tekstowym i na razie nie chce ich zmieniac.
Czy mozesz poradzic mi jak sie zabrac do drukowania istniejacych wydrukow na
domyslnej drukarce windows
przy minimalnych przerobkach w kodzie starej aplikacji?
--
Szczepan
Myslę, że nie powinienes przechwytywać błedów tylko doprowadzic do
poprawnego zlinkowania aplikacji, a wniej terminala graficznego. Na początek
jednego (np. samo GTWIN). Ale piszesz, że już działa normalnie, więc chyba
sie udało. Powinieneś przy tego typu problemach podawać skrypt linkujacy i
podać info o kompilatorze C - było by łatwiej.
...
> Czy mozesz poradzic mi jak sie zabrac do drukowania istniejacych wydrukow
> na domyslnej drukarce windows
> przy minimalnych przerobkach w kodzie starej aplikacji?
>
Powinno pójść bez żadnych zmian. Jak nie idzie - podaj przykłąd i jakoś go
opisz.
Jeżeli drukujesz z pliku (gdy masz Set Printer To <NazwaJakiegoPliku>), to
taki plik z różnych powodów lepiej jest podać na drukarkę za pomocą :
PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')
To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod Windows.
Pozdrawiam,
Marek Horodyski
>> przy minimalnych przerobkach w kodzie starej aplikacji?
Coś takiego mi w oczy wpadło (przetestuj, działa) :
#define _SET_PRINTER SET( 23)
#define _SET_PRINTFILE SET( 24)
#define _SET_PRINTER SET( 23)
#define _SET_DEVICE SET( 20)
?? 'Print test'
? '---------------------------------'
? SET(_SET_DEVICE)
aPrinter:=GetPrinters()
IF EMPTY(aPrinter)
? '----- No Printers installed'
ELSE
Set( 24, (GetDefaultPrinter()), .F. ) // set printer to
(GetDefaultPrinter())
? SET(_SET_PRINTER)
? SET(_SET_PRINTFILE)
Set( 17, "off" ) // set console off
Set( 23, "on" ) // set printer on
? 'Default Printer'
? '----------------'
? GetDefaultPrinter()
?
? 'Printers Available'
? '-------------------'
FOR x := 1 TO LEN( aPrinter)
? aPrinter[ x]
NEXT x
aPrinter:= GetPrinters(.T.)
? 'Printers and Ports'
? '-------------------'
FOR x := 1 TO LEN( aPrinter)
? aPrinter[ x, 1] + ' on ' + aPrinter[ x, 2]
NEXT x
__Eject() // EJECT
Set( 23, "off" ) // set printer off
Set( 17, "on" ) // set console on
Set( 24, "" ) // set printer to
END IF
? SET( _SET_PRINTER)
? SET( _SET_DEVICE)
Gdzieś mam też przykłady z klasą win32prn(), ale pewnie znajdziesz je sam w
jakimś /tests/testw32p.prg.
Pozdrawiam,
Marek Horodyski
> Myslę, że nie powinienes przechwytywać błedów tylko doprowadzic do
> poprawnego zlinkowania aplikacji, a wniej terminala graficznego. Na
> początek jednego (np. samo GTWIN). Ale piszesz, że już działa normalnie,
> więc chyba sie udało. Powinieneś przy tego typu problemach podawać skrypt
> linkujacy i podać info o kompilatorze C - było by łatwiej.
>
Mnie nie chodzilo o przechwytywanie bledow kompilacji tylko o bledy podczas
wykonywania sie aplikacji.
Sa pewne drobiazgi ktore Clipper podczas realizacji tolerowal a xHarbour
nie.
podczas realizacji wywala mi sie blad z lista wywolywanych programow (i to
jest ok) ale brak jest opisu bledu
zawsze jest "Uncoverable error 9002:No ERRORBLOCK() for error" i moje
pytanie dotyczylo tylko jak ten komunikat zamienic na opis faktycznego
bledu.
Jesli chodzi o skrypt linkujacy to podawalem go w tym watku w czwarty moim
poscie od gory.
Kompilator C yo Borland C++ Compiler 5.5.1.
> Jeżeli drukujesz z pliku (gdy masz Set Printer To <NazwaJakiegoPliku>), to
> taki plik z różnych powodów lepiej jest podać na drukarkę za pomocą :
>
> PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')
>
> To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod
> Windows.
>
Wlasnie o to mi chodzilo, zaraz wyprobuje, mysle ze zadziala.
Jeszcze jedno, w jaki sposob moge wyswietlac na ekranie podglad wydruku (w
trybie tekstowym).
W Clipperze mialem podlinkowany jakis obj ktory mi wyswietlal wydruk na
ekranie ale pod xHarbour nie kompiluje sie.
--
Szczepan
Przekompilowalem, dziala ale w rezultacie na ekranie pojawia mi sie taki
wynik:
Print test
---------------------------------
NIL
NIL
NIL
NIL
NIL
Wyglada na to ze nic nie jest widoczne z poziomu tego programiku.
W systemie windows XP mam zdefiniowane dwie drukarki:
Microsoft Office Document Image Writer (domyslna)
Samsung SCX-4200 Series
--
Szczepan
W zwiazku z konwersja aplikacji Clipperowej na xHarbour chcialem za jednym
zamachem uporzadkowac zapis polskich czcionek. Poniewaz aplikacja ma byc
nadal w trybie znakowym chcialem przekonwertowac znaki w dbfach i w
programach na ISO8859-2 i dalej pisac programy z uzyciem tego kodowania.
Pracujac pod Windows XP napotkalem od razu trudnosc.
Okno polecen w windows dziala w systemie CP852. Edytor w ktorym od wilu lat
pisze programy w trybie znakowym Multi Edit, rowniez w tym systemie sprawuje
sie dobrze.
Nie umiem zmienic tak strony kodowej na ISO8859-2 aby w oknie pelnoekranowym
i w Multi Edit widoczne byly poprawnie polskie znaki.
Czy mozesz poradzic mi jakim edytorem pod Windows da sie pisac programy w
kodowaniu ISO8859-2.
Moj kolega z tego powodu przeszedl na Linuxa.
A moze masz na to wszystko zupelnie inny sposob, jak Ty dajesz sobie rade z
ogonkami w aplikacjach znakowych?
--
Szczepan
[...]
>> PrintFileRaw( GetDefaultPrinter(), 'NazwaPliku')
>>
>> To GetDefaultPrinter() zwraca drukarkę ustawioną jako domyślną pod
>> Windows.
>>
> Wlasnie o to mi chodzilo, zaraz wyprobuje, mysle ze zadziala.
> Jeszcze jedno, w jaki sposob moge wyswietlac na ekranie podglad wydruku (w
> trybie tekstowym).
> W Clipperze mialem podlinkowany jakis obj ktory mi wyswietlal wydruk na
> ekranie ale pod xHarbour nie kompiluje sie.
Taką funkcjonalność można napisać samemu. Osobiście mam to tak zrobione, ze
wydruk zawsze idzie do pliku. Czyli jako wyjscie wydruku jest :
set printer to 'nazwaPliku'
Oczywiście nazwa jest dynamicznie wyliczana, i kazdy uzytkownik ma swój
prywatny plik wydruku. Jak chce wydrukowac, wywołuje menu wydruku (i w tym
momencie plik wydruku jest zamykany !), gdzie ma w menu między
innymi -wydrukuj x-kopii, -podejrzyj, wstaw do archiwum, skasuj itp. To
zamykanie i otwieranie (może powrócić do wydruku - czyli plik jest ponownie
otwierany - Set( 24, 'nazwaPliku', [.t.|.f.]) ) musi być przemyślane i
skorelowane z ustanowieniem pierwotnej nazwy pliku!
Jak z menu wybiera podgląd - włączam standardowego tbrowsa do podglądu
plików i juz. Tego tbrowsa zamknołem w funkcji Look - czyli jest w kodzie :
If oglądać ; Look( 'nazwaPliku')
ElseIf cosInnego ; CosInnego()
A ten Look to we fragmencie :
oTbr := TBrowseNew( Top, Left, Bottom, Right)
oTbr:cargo := Array( CARGO_DIM)
oTbr:od_kolumny := 1
oTbr:goTopBlock := {| | pocz_pliku(oTbr) }
oTbr:goBottomBlock := {| | koniec_pliku(oTbr) }
oTbr:skipBlock := {|n| myskipper(n, oTbr) }
oTbr:colorSpec := k
if !otworz_plik( oTbr, fName)
return .f.
end
oTbr:od_kolumny := 1
oTbc := TBColumnNew(, {|| substr( oTbr:linia, oTbr:od_kolumny)})
oTbc:width := Right - Left + 1
oTbc:defcolor := { 1, 2}
oTbr:addColumn( oTbc)
If disp
oTbr:forceStable() ; Czy_Koniec := .t. // nKey := 27
End
While !czy_koniec
While NextKey() == 0 .AND. !oTbr:stabilize() ; End
Całośc ponad 8 kilo, jak chcesz to mogę Ci przesłać na priv - będzie się
kompilować :)
A błąd 9002 będzie napewno zwiazany z :
9002 RDD invalid or not linked
Explanation: The runtime system has failed to detect a matching RDD
loaded for the database and indices used in the application.
Action: Make sure the database header is correct. Recreate the
indices. Refer to Actions and Notes under 999 and 1011. Check third
party .LIBraries for compatibility and version. Check link script and
order. Look for missing RDD .LIBrary or .OBJ files. The .EXE may be
invalid.
See Also: "Linking" and "Debugger" chapters of the Programming and
Utilities Guide.
Gdyż numery błędów są raczej tak samo jak w Clipperze poukładane, i tu
należało by szukać przyczyny.
Pozdrawiam,
Marek Horodyski
Powinienem napisać : "u mnie działa" :)
Przynajmnie mam coś na monitorze, coś na drukarce.
Tu jest bezpośredni wydruk na drukarkę, osobiście stosuję przejście przez
plik.
Spróbuj zmienić drukarkę domyślną i powtórzyć uruchomienie.
> Przekompilowalem, dziala ale w rezultacie na ekranie pojawia mi sie taki
> wynik:
>
> Print test
> ---------------------------------
> NIL
> NIL
> NIL
> NIL
> NIL
>
> Wyglada na to ze nic nie jest widoczne z poziomu tego programiku.
> W systemie windows XP mam zdefiniowane dwie drukarki:
> Microsoft Office Document Image Writer (domyslna)
> Samsung SCX-4200 Series
Zmień drukarkę domyślną i zobacz czy jest wydruk. Jak będziesz miał problemy
to być może ta drukarka nie ma wlasnego procesora wydruku. Wtedy trzeba by
od razu korzystac z klasy którą wspomniałem. Wtedy korzystasz ze
specyfikacji przygotowanej przez Windows.
Pozdrawiam,
Marek Horodyski
[...]
> Moj kolega z tego powodu przeszedl na Linuxa.
> A moze masz na to wszystko zupelnie inny sposob, jak Ty dajesz sobie rade
> z ogonkami w aplikacjach znakowych?
Ze wzgledu na to, ze dane przez pewien okres były współdzielone przez
Clippera i xHarbour - pracowałem pod CP852. Zarówno w danych jak i na
ekranie. Nie wiem czy można bez GUI mieć inna stronę kodową niż 852 - gdyż
ta właśnie wspomagana jest przez OS. Działa mi ona zarówno pod GTWIN jaki
GTWVT.
Pozdrawiam,
Marek Horodyski
--
Szczepan
Można tak zrobić
Dla GUI - trzeba pisać i wiświetlać w stronie kodowej PLWIN
request HB_LANG_PL852
request HB_CODEPAGE_PL852
request HB_LANG_PLWIN
request HB_CODEPAGE_PLWIN
HB_LANGSELECT('PLWIN')
HB_SETCODEPAGE( "PLWIN" )
A tablicę otwieramy w stroniekodowej PL852
use TABLICAX Alias TABX new shared via DBFNTX CODEPAGE "PL852"
jeżeli chcemy pisać jako aplikacja CRT (tryb terminalowy )
request HB_LANG_PL852
request HB_CODEPAGE_PL852
// request HB_LANG_PLWIN
// request HB_CODEPAGE_PLWIN
HB_LANGSELECT('PL852')
HB_SETCODEPAGE( "PL852" )
A tablicę otwieramy w stroniekodowej PL852
use TABLICAX Alias TABX new shared via DBFNTX CODEPAGE "PL852"
Pozdrowienia
Jacek K.
kiedyś zaciągnąłem z netu bibliotekę ze źródłem w C do listowania pliku
tekstowego na ekranie. Teraz przerobiłem to tak aby można było używać pod
gcc i mingw + kolorowanie "składni", podświetlanie wiersza i wycinanie
znaków sterujących wysyłanych na drukarkę. Co jest w tym dobre to to, że
pliki wielkości np. kilkudziesięciu MB przegląda się bardzo szybko, nie ma
jedynie skoków do wybranych stron.
Listowanie katalogu z wydrukami jest oparte o zwykłe TBrowse, przy czym
metody przechodzenia do rekordów operują na tablicy wczytanych plików.