Silverfrost Forums

Welcome to our forums

A proble with an accelerator key using ampersand (&)

8 May 2020 3:13 #25359

Hello guys,

Has anybody observed the following (from my point of view) non-standard behavior when using ampersand (&) to define an accelerator key? (I have the FTN95 version 8.61 and Plato 5.2.0)

Here is the description of the situation:

In my code, I often use the ampersand (&) mark to let underline the unique letters in menu/submenu/buttons for using with the ALT key.

But, when I start the program, initially - I see NO underlined letters in menu (and submenu - if available) items. They (the underlined letters) are ONLY then visible, when I physically press the ALT key on the keyboard first (then they appear and function as expected).

However, as soon as I click with my mouse either in the main window area of the program or also outside of this area, the underlined letters become again non-underlined, so I have to press again the ALT key on the keyboard to see them underlined again (which then again disappear by any next mouse clicking) and so on around.

This does NOT apply to buttons. There (when used) - the underlined characters are always visible without the need to press the ALT key first!

REMARK: I use the function CALL ENABLE_UTF8@(1) to be able to use non-ASCII characters (in my case - such non-ASCII characters which are part of the slovak alphabet).

Martin

8 May 2020 5:21 #25360

This could also be because you are using UTF-8 encoding. If you will post a short sample program then I will aim to fix the problem.

8 May 2020 5:54 #25361

Isn't that the normal behaviour in Windows 10?

Eddie

8 May 2020 6:28 #25362

Paul,

here an excerpt of the program, which creates the menu items:

ans=winio@('%mn[&Súbor[&Otvoriť súbor,~Zme&niť znamienka pre DX a DY]]&',cb_open_in_out,button_grey_control,cb_znam)
ans=winio@('%mn[[~Začať &konverziu,|,&Ukončiť]]&',button_grey_control,cont,knc)
ans=winio@('%mn[&Mapa[~&Zobraziť]]&',button_grey_control_mapa,knc)
ans=winio@('%mn[Po&moc[O p&rograme]]&',cb_about) 

Note that the letters S, O, n, k, U, M, Z, m, r after the start of the program should appear underlined, what is not the case. They appear underlined ONLY AFTER pressing the ALT key first.

Martin

9 May 2020 7:49 #25363

Thanks Martin but I need a working program. Even it only takes 5 or 10 minutes for me to work out what are integers and what are callbacks, that is time that could be better used.

9 May 2020 1:54 #25364

Paul, of coarse, I do not to waste your time, so here is main program with callbacks (I did not attach one call-back function called cb_open_in_out() which is pretty long, but to investigate the problem this callback is not relevant. I also did not attached another two subroutines for the same reason.

Remember to use UTF-8 without signature to use my source codes (there are lot of slovak special characters, first of all in comments)

WINAPP

PROGRAM TXT_2_SGF_WIN_APP

!    USE TXT_SGF
    USE MSWIN
    
    IMPLICIT NONE
!    INCLUDE <windows.ins>
    EXTERNAL sb_vstup3, sb_vstup4,knc, cont, cb_open_in_out, cb_znam, cb_about
   
    INTEGER*4 button_grey_control, knc, cont, cb_open_in_out, cb_znam, cb_about !!!pokracuj  
    INTEGER*4 ans, w, h, sb_vstup3, sb_vstup4, i, vybrate, kod, test, button_grey_control_mapa

    LOGICAL STOP_PROCESSING_2
    
    CHARACTER*129 subor3, subor4    ! Deklarácia premenných (vstupný a výstupný súbor) vrátane cesty k nim
    CHARACTER*1 zmena(2)            ! Deklarácia pre výber v combo boxe (a alebo n)
    CHARACTER*181 b1_h, b2_h, b3_h  ! Deklarácia HELP re&#357;azcov
    CHARACTER*20 b4_h
   DATA (zmena(i), i=1,2)/'a','n'/

COMMON/retazec1/subor3
    COMMON/retazec2/subor4
    COMMON/cel_cisla1/button_grey_control
    COMMON/cel_cisla2/vybrate
    COMMON/zmena_znam/zmena
    COMMON/testovanie1/kod
    COMMON/testovanie2/test
    COMMON/kontrola/STOP_PROCESSING_2
    COMMON/grafika/button_grey_control_mapa

    
    STOP_PROCESSING_2 = .FALSE. !to je pre externu funkciu KON_2, ktorá sa vyvola pri kontrole vstupneho suboru, ak sa v nom najde chyba v subroutine
                                !Konverzia_TXT_2_SGF-input

    test = -1
    kod = -1

    b1_h='Textový súbor so 7-riadkovou hlavi&#269;kou a hodnotami'//char(10)//' X,Y,DX,DY v tvare nepravouholníkovej mriežky, '//char(10)//&
&'(hodnoty X,Y nie sú zoradené vzostupne)'
    b2_h='Výstupný súbor, do ktorého sa zapíšu hodnoty X,Y,DX,DY vo'//char(10)//' vzostupnom poradí doplnené hodnotami X,Y,&
& pre ktoré DX=0, DY=0,'//char(10)//'aby sa vytvorila pravouholníková mriežka bodov' 
    b3_h='Po zvolení vst. a výst. súboru sa kliknutím'//char(10)//'na tento gombík spustí konverzia údajov'
    b4_h='Ukon&#269;enie programu'

	w=830
    h=490

    subor3='.txt'
    subor4='.txt' 

button_grey_control = 0
     button_grey_control_mapa = 0

ans=winio@('%sz&',w,h)

ans=winio@('%ww[thin_border]&')

 ans=winio@('%ca[Program: TXT_2_SGF,        © Martin Kalafut]&')

ans=winio@('%mn[&Súbor[&Otvori&#357; súbor,~Zme&ni&#357; znamienka pre DX a DY]]&',cb_open_in_out,button_grey_control,cb_znam)
ans=winio@('%mn[[~Za&#269;a&#357; &konverziu,|,&Ukon&#269;i&#357;]]&',button_grey_control,cont,knc)
ans=winio@('%mn[&Mapa[~&Zobrazi&#357;]]&',button_grey_control_mapa,knc)
ans=winio@('%mn[Po&moc[O p&rograme]]&',cb_about) 

ans=winio@('%4nl%ta%bf%fn[Courier New]Zvo&#318; vstupný TXT súbor:%4ta%bc[yellow]%`^?bt[&Vybra&#357; vstupný súbor]@%`bh&',&
           'FILE_OPENR[Zvo&#318; súbor]',subor3,sb_vstup3,b1_h,1)

  ans=winio@('%bg[grey]&')

ans=winio@('%2nl%ta%sf%bf%fn[Courier New]%ob%80st%cb&',subor3)

ans=winio@('%3nl%ta%bf%fn[Courier New]Zvo&#318; výstupný TXT súbor:%4ta%bc[yellow]%~^?bt[&Vy&bra&#357; výstupný súbor]@%`bh&',&
           button_grey_control,'FILE_OPENW[Zvo&#318; súbor]',subor4,sb_vstup4,b2_h,1)

ans=winio@('%2nl%ta%sf%bf%fn[Courier New]%ob%80st%cb&',subor4)

	vybrate=1

ans=winio@('%3nl%ta%bf%fn[Courier New]Zmeni&#357; zn. pred DX a DY vo výslednom TXT súbore? (a=áno, n=nie)%`5.2ls&',zmena,3l,vybrate)

ans=winio@('%3nl%ta%bf%fn[Courier New]Spustenie konverzie údajov:%ta%bc[green]%~^?bt[Š&TART]@%`bh&',button_grey_control,cont,b3_h,1)
    ans=winio@('%ta%bf%fn[Courier New]Koniec programu:%ta%bc[red]%^?bt[&KONIEC]@%`bh',knc,b4_h,1)

END PROGRAM TXT_2_SGF_WIN_APP

INTEGER FUNCTION knc() ! call-back funkcia na ukon&#269;enie programu jednak pre button KONIEC, jednak pre menu položku SÚBOR/UKON&#268;I&#356;
    IMPLICIT NONE
    INTEGER*4 knc
    knc=-2
END FUNCTION knc

INTEGER FUNCTION cont() ! call-back funkcia na spustenie konverzie jednak pre button ŠTART a aj pre položku menu SÚBOR/ZA&#268;A&#356; KONVERZIU
     IMPLICIT NONE
     INTEGER*4 cont, button_grey_control, vybrate, button_grey_control_mapa 
     CHARACTER*129 subor3, subor4
     COMMON/cel_cisla1/button_grey_control
     COMMON/cel_cisla2/vybrate    
     COMMON/retazec1/subor3
     COMMON/retazec2/subor4
     COMMON/grafika/button_grey_control_mapa ! subroutina Konverzia_TXT_2_SGF-Input da info tejto externej funkcii tym, ze nastavi tuto premennu na rovnu 1
                                             ! (button_grey_control_mapa = 1, ak cela konverzia uspesne prebehne a tato hodnota (1) sa
                                             ! odovzda hlavnemu programu (kedze je COMMON), kde je definovana na zaciatku programu ako
                                             ! button_grey_control_mapa = 0, a zmenou na 1 sa zaktivni submenu MAPA/ZOBRAZI&#356; (ktore je zo zaciatku neaktivne
                                             !(kedze nie je co zobrazovat, kym cela konverzia uspesne neprebehne)
     cont=2
     CALL window_update@(vybrate)
   !!!  CALL Konverzia_TXT_2_SGF_Input (subor3, subor4, vybrate)
END FUNCTION cont

INTEGER FUNCTION sb_vstup3() ! Call-back funkcia pre button VYBRA&#356; VSTUPNÝ SÚBOR na zvolenie a zapísanie mena (aj s cestou) vstupného súboru do boxu v hlavnom okne
     IMPLICIT NONE
     CHARACTER*129 subor3
     INTEGER*4 sb_vstup3, button_grey_control
     COMMON/cel_cisla1/button_grey_control
     COMMON/retazec1/subor3
     button_grey_control=1
     sb_vstup3=2
     CALL window_update@(subor3)
END FUNCTION sb_vstup3

INTEGER FUNCTION sb_vstup4() ! Call-back funkcia pre button VYBRA&#356; VÝSTUPNÝ SÚBOR na zvolenie a zapísanie mena (aj s cestou) výstupného súboru do boxu v hlavnom okne
     IMPLICIT NONE
     LOGICAL, EXTERNAL :: FEXISTS@
     LOGICAL L
     CHARACTER*129 subor3, subor4
     INTEGER*4 sb_vstup4, button_grey_control, err_code, w, h, ans
     COMMON/cel_cisla1/button_grey_control
     COMMON/retazec1/subor3
     COMMON/retazec2/subor4
     
     IF(FEXISTS@(subor4,err_code)) then

       IF(subor4.eq.subor3) THEN     
                w=520
      			h=180
	  			ans=winio@('%sz&',w,h)
      			ans=winio@('%ca[Info o zvolenom výstupnom súbore]&')
                ans=winio@('%si#%bx&',0.3d0) ! %bx s argumentom výšky pixela (dounle precision-v tomoto prípade 0.3d0, pridá šedý pásik nad textom
                                             ! so zvolenou ikonou, ktorý je nad textom oddeleny ciarou 
                ans=winio@('%nl%ta%sf%cnNie je možné vybra&#357; rovnaký názov výstupného súboru, aký&')
                ans=winio@('%nl%ta má aj vstupný súbor! Mením koncovku súboru na *.csv!&')    
                ans=winio@('%2nl%cn%9`bt[OK]')
              !!!   ans=winio@('%si#%ta%cn%ws&','Nie je možné vybra&#357; rovnaký názov výstupného súboru,')
              !!!   ans=winio@('%nl%ta%cn%ws&','aký má aj vstupný súbor! Koncovka bude automaticky zmenená na ')
              !!!   ans=winio@('%ws&','.csv')
              !!!   ans=winio@(' &')
              !!!   ans=winio@('%2nl%cn%9`bt[OK]')
                CALL SET_SUFFIX@(subor4,'CSV',L)  ! Volanie internej funckie FTN95 SETSUFFIX@ na zmenu koncovky mena vystupneho suboru
       ELSE
	            w=0
      			h=0
	  			ans=winio@('%sz&',w,h)
      			ans=winio@('%ca[Info o zvolenom výstupnom súbore]&')
                ans=winio@('%si!%ta%sf%cnSúbor už existuje! Ak nezmeníte názov súboru, bude prepísaný!&')
                ans=winio@('%2nl%cn%9`bt[OK]')
       END IF
      
     END IF
       
     sb_vstup4=2
     CALL window_update@(subor4)
END Function sb_vstup4

INTEGER FUNCTION cb_znam() ! call-back funkcia pre menu položku  Zmeni&#357; znamienka pre DX a DY
     IMPLICIT NONE
     INTEGER*4 cb_znam, vybrate, ans
     CHARACTER*(1) zmena(2)
     COMMON/cel_cisla2/vybrate
     COMMON/zmena_znam/zmena
     ans=winio@('%ca[Definovanie znamienok pre hodnoty DX a DY]&')
     ans=winio@('%bg[grey]&')
     ans=winio@('%3nl%ta%bf%fn[Courier New]Zmeni&#357; zn. pred DX a DY vo výslednom TXT súbore? (a=áno, n=nie)%5.2ls&',zmena,3l,vybrate)
     ans=winio@('%3nl%cn%9`bt[&OK]')
     CALL window_update@(vybrate)
     cb_znam=2
END FUNCTION cb_znam

INTEGER FUNCTION cb_about() ! Call-back funkcia pre menu položku POMOC/O PROGRAME
     IMPLICIT NONE
     INTEGER*4 cb_about, ans
     ans=winio@('%ca[O programe TXT_2_SGF]&')
     ans=winio@('%fn[Arial]%ts%bf%cnProgram TXT_2_SGF&',2.0d0)
     ans=winio@('%`bf%ts%3nl&',1.0d0)
     ans=winio@('%taVykoná správne zoradenie vstupných údajov X,Y,DX,DY nepravouholníkovej mriežky pokrývajúcej celú SR%nl&')
     ans=winio@('%taa doplní ju na pravouholníkovú mriežku, kde všetky doplnené body mriežky majú hodnoty DX a DY nulové.%nl&')
     ans=winio@('%taPravouholníkový tvar mriežky je nutný pre vytvorenie binárneho SGF (SHIFT GRID FILE) formátu, ktorý sa%nl&')
     ans=winio@('%tav softvéri Trimble Bussines Center používa na transformáciu GNSS geocentrických súradníc do%nl&') 
     ans=winio@('%talokálneho súradnicového systému S-JTSK. Výsledkom konverzie je &#269;itate&#318;ný TXT súbor obsahujúci%nl&')
     ans=winio@('%tapravouholníkovú mriežku s požadovaným zoradením hodnôt súradníc X, Y a ich zmien DX, DY.%2nl&')
     ans=winio@('%taHodnoty v každom bode mriežky sú súradnice X,Y v súradnicovom systéme S-JTSK03 spolu%nl&')
     ans=winio@('%tas príslušnými zmenami DX a DY, ktoré vyjadrujú väzbu na pôvodný súradnicový systém S-JTSK.%2nl&')
     ans=winio@('%taVstupný súbor je v &#269;itate&#318;nom TXT formáte a prvých sedem riadkov obsahuje hlavi&#269;ku, ktorá musí%nl&')
     ans=winio@('%tama&#357; nasledovný formát (hodnoty Xmin, Xmax, Ymin, Ymax, Xkrok, Ykrok môžu by&#357; aj iné):%2nl&')
     ans=winio@('%ta1.riadok obsahuje minimálnu hodnotu súradnice X(S-JTSK03):%taXmin = -1335000 m%nl&')
     ans=winio@('%ta2.riadok obsahuje maximálnu hodnotu súradnice X(S-JTSK03):%taXmax = -1132000 m%nl&')
     ans=winio@('%ta3.riadok obsahuje minimálnu hodnotu súradnice Y(S-JTSK03):%taYmin = -592000 m%nl&')
     ans=winio@('%ta4.riadok obsahuje maximálnu hodnotu súradnice Y(S-JTSK03):%taYmax = -165000 m%nl&')
     ans=winio@('%ta5.riadok obsahuje krok v súradnici X(S-JTSK03):%2taXkrok = 1000 m%nl&')
     ans=winio@('%ta6.riadok obsahuje krok v súradnici Y(S-JTSK03):%2taYkrok = 1000 m%nl&')
     ans=winio@('%ta7.riadok obsahuje NULOVÚ hodnotu%nl&')
     ans=winio@('%ta8.riadok a &#271;alšie až do konca obsahujú konkrétne súradnice X (m), Y(m) v S-JTSK03 v bodoch mriežky %nl&')
     ans=winio@('%taa ich zmeny DX (m), DY (m) vyjadrujúcimi posuny vo&#269;i S-JTSK a musia by&#357; v tvare:%nl&')
     ans=winio@('%ta-1333000 -483000 -0.74 0.25 (odde&#318;ova&#269; hodnôt údajov môže by&#357; medzera alebo &#269;iarka)%3nl&')
     ans=winio@('%ta%bf%tc[red]UPOZORNENIE: Vyššie uvedený vstupný formát údajov MUSÍ by&#357; dodržaný, inak konverzia zlyhá!%nl&')
     ans=winio@('%taVšetky hodnoty súradníc (X,Y) vstupnej mriežky MUSIA by&#357; ZÁPORNÉ celé &#269;ísla (bez desatinných miest)!%2nl&')
     ans=winio@('%ta%tc[black]Autor vstupného TXT súboru nepravouholníkovej mriežky je GKÚ Bratislava.&')
     ans=winio@('%2nl%taAutor konverzného programu TXT_2_SGF: Dr. Ing. Martin Kalafut (martin.kalafut@agis.sk)&')
     ans=winio@('%bg[grey]&')
     ans=winio@('%3nl%cn%9`bt[OK]')
     cb_about=1
END FUNCTION cb_about

INTEGER FUNCTION button1 ()
IMPLICIT NONE
   INTEGER*4 button1, test
   COMMON/testovanie2/test
   test=0          ! prepísanie súboru
   button1=0
END FUNCTION button1

INTEGER FUNCTION button2 ()
   IMPLICIT NONE
   INTEGER*4 button2, test
   COMMON/testovanie2/test
   test = 1             ! súbor sa znovu bude vybera&#357;
   button2=0
END FUNCTION button2
9 May 2020 2:01 #25365

Sorry, something went wrong, so again:

WINAPP 

PROGRAM TXT_2_SGF_WIN_APP

!    USE TXT_SGF
    USE MSWIN
    
    IMPLICIT NONE
!    INCLUDE <windows.ins>
    EXTERNAL sb_vstup3, sb_vstup4,knc, cont, cb_open_in_out, cb_znam, cb_about
   
    INTEGER*4 button_grey_control, knc, cont, cb_open_in_out, cb_znam, cb_about !!!pokracuj  
    INTEGER*4 ans, w, h, sb_vstup3, sb_vstup4, i, vybrate, kod, test, button_grey_control_mapa

    LOGICAL STOP_PROCESSING_2
    
    CHARACTER*129 subor3, subor4    ! Deklarácia premenných (vstupný a výstupný súbor) vrátane cesty k nim
    CHARACTER*1 zmena(2)            ! Deklarácia pre výber v combo boxe (a alebo n)
    CHARACTER*181 b1_h, b2_h, b3_h  ! Deklarácia HELP re&#357;azcov
    CHARACTER*20 b4_h

 DATA (zmena(i), i=1,2)/'a','n'/

COMMON/retazec1/subor3
    COMMON/retazec2/subor4
    COMMON/cel_cisla1/button_grey_control
    COMMON/cel_cisla2/vybrate
    COMMON/zmena_znam/zmena
    COMMON/testovanie1/kod
    COMMON/testovanie2/test
    COMMON/kontrola/STOP_PROCESSING_2
    COMMON/grafika/button_grey_control_mapa

    
    STOP_PROCESSING_2 = .FALSE. !to je pre externu funkciu KON_2, ktorá sa vyvola pri kontrole vstupneho suboru, ak sa v nom najde chyba v subroutine
                                !Konverzia_TXT_2_SGF-input

    test = -1
    kod = -1

    b1_h='Textový súbor so 7-riadkovou hlavi&#269;kou a hodnotami'//char(10)//' X,Y,DX,DY v tvare nepravouholníkovej mriežky, '//char(10)//&
&'(hodnoty X,Y nie sú zoradené vzostupne)'
    b2_h='Výstupný súbor, do ktorého sa zapíšu hodnoty X,Y,DX,DY vo'//char(10)//' vzostupnom poradí doplnené hodnotami X,Y,&
& pre ktoré DX=0, DY=0,'//char(10)//'aby sa vytvorila pravouholníková mriežka bodov' 
    b3_h='Po zvolení vst. a výst. súboru sa kliknutím'//char(10)//'na tento gombík spustí konverzia údajov'
    b4_h='Ukon&#269;enie programu'
!
! Prednastavenie ve&#318;kosti okna: w (width - po&#269;et st&#314;pcov) x h (height - po&#269;et riadkov), všetko v pixeloch
!
	w=830
    h=490
!
! Inicializácia súborov pre štandardnú dialógovú funkciu vo&#318;by súborov OPEN_FILER. Je to potrebné (tá inicializácia),
! ke&#271;že bez toho by sa táto funkcia správala nevyspytate&#318;ne.
!
    subor3='.txt'
    subor4='.txt' 

     button_grey_control = 0
     button_grey_control_mapa = 0
!
! umoznenie pisania diakritiky v texte
!
    call ENABLE_UTF8@(1)

    ans=winio@('%sz&',w,h)

    ans=winio@('%ww[thin_border]&')

    ans=winio@('%ca[Program: TXT_2_SGF,        © Martin Kalafut]&')

ans=winio@('%mn[&Súbor[&Otvori&#357; súbor,~Zme&ni&#357; znamienka pre DX a DY]]&',cb_open_in_out,button_grey_control,cb_znam)
ans=winio@('%mn[[~Za&#269;a&#357; &konverziu,|,&Ukon&#269;i&#357;]]&',button_grey_control,cont,knc)
ans=winio@('%mn[&Mapa[~&Zobrazi&#357;]]&',button_grey_control_mapa,knc)
ans=winio@('%mn[Po&moc[O p&rograme]]&',cb_about) 

ans=winio@('%4nl%ta%bf%fn[Courier New]Zvo&#318; vstupný TXT súbor:%4ta%bc[yellow]%`^?bt[&Vybra&#357; vstupný súbor]@%`bh&',&
           'FILE_OPENR[Zvo&#318; súbor]',subor3,sb_vstup3,b1_h,1)

  ans=winio@('%bg[grey]&')

	ans=winio@('%2nl%ta%sf%bf%fn[Courier New]%ob%80st%cb&',subor3)


ans=winio@('%3nl%ta%bf%fn[Courier New]Zvo&#318; výstupný TXT súbor:%4ta%bc[yellow]%~^?bt[&Vy&bra&#357; výstupný súbor]@%`bh&',&
           button_grey_control,'FILE_OPENW[Zvo&#318; súbor]',subor4,sb_vstup4,b2_h,1)


    ans=winio@('%2nl%ta%sf%bf%fn[Courier New]%ob%80st%cb&',subor4)

	vybrate=1

ans=winio@('%3nl%ta%bf%fn[Courier New]Zmeni&#357; zn. pred DX a DY vo výslednom TXT súbore? (a=áno, n=nie)%`5.2ls&',zmena,3l,vybrate)

    ans=winio@('%3nl%ta%bf%fn[Courier New]Spustenie konverzie údajov:%ta%bc[green]%~^?bt[Š&TART]@%`bh&',button_grey_control,cont,b3_h,1)
    ans=winio@('%ta%bf%fn[Courier New]Koniec programu:%ta%bc[red]%^?bt[&KONIEC]@%`bh',knc,b4_h,1)

END PROGRAM TXT_2_SGF_WIN_APP

INTEGER FUNCTION knc() ! call-back funkcia na ukon&#269;enie programu jednak pre button KONIEC, jednak pre menu položku SÚBOR/UKON&#268;I&#356;
    IMPLICIT NONE
    INTEGER*4 knc
    knc=-2
END FUNCTION knc


INTEGER FUNCTION cont() ! call-back funkcia na spustenie konverzie jednak pre button ŠTART a aj pre položku menu SÚBOR/ZA&#268;A&#356; KONVERZIU
     IMPLICIT NONE
     INTEGER*4 cont, button_grey_control, vybrate, button_grey_control_mapa 
     CHARACTER*129 subor3, subor4
     COMMON/cel_cisla1/button_grey_control
     COMMON/cel_cisla2/vybrate    
     COMMON/retazec1/subor3
     COMMON/retazec2/subor4
     COMMON/grafika/button_grey_control_mapa ! subroutina Konverzia_TXT_2_SGF-Input da info tejto externej funkcii tym, ze nastavi tuto premennu na rovnu 1
                                             ! (button_grey_control_mapa = 1, ak cela konverzia uspesne prebehne a tato hodnota (1) sa
                                             ! odovzda hlavnemu programu (kedze je COMMON), kde je definovana na zaciatku programu ako
                                             ! button_grey_control_mapa = 0, a zmenou na 1 sa zaktivni submenu MAPA/ZOBRAZI&#356; (ktore je zo zaciatku neaktivne
                                             !(kedze nie je co zobrazovat, kym cela konverzia uspesne neprebehne)
     cont=2
     CALL window_update@(vybrate)
     CALL Konverzia_TXT_2_SGF_Input (subor3, subor4, vybrate)
END FUNCTION cont


INTEGER FUNCTION sb_vstup3() ! Call-back funkcia pre button VYBRA&#356; VSTUPNÝ SÚBOR na zvolenie a zapísanie mena (aj s cestou) vstupného súboru do boxu v hlavnom okne
     IMPLICIT NONE
     CHARACTER*129 subor3
     INTEGER*4 sb_vstup3, button_grey_control
     COMMON/cel_cisla1/button_grey_control
     COMMON/retazec1/subor3
     button_grey_control=1
     sb_vstup3=2
     CALL window_update@(subor3)
END FUNCTION sb_vstup3


INTEGER FUNCTION sb_vstup4() ! Call-back funkcia pre button VYBRA&#356; VÝSTUPNÝ SÚBOR na zvolenie a zapísanie mena (aj s cestou) výstupného súboru do boxu v hlavnom okne
     IMPLICIT NONE
     LOGICAL, EXTERNAL :: FEXISTS@
     LOGICAL L
     CHARACTER*129 subor3, subor4
     INTEGER*4 sb_vstup4, button_grey_control, err_code, w, h, ans
     COMMON/cel_cisla1/button_grey_control
     COMMON/retazec1/subor3
     COMMON/retazec2/subor4
     
     IF(FEXISTS@(subor4,err_code)) then

       IF(subor4.eq.subor3) THEN     
                w=520
      			h=180
	  			ans=winio@('%sz&',w,h)
      			ans=winio@('%ca[Info o zvolenom výstupnom súbore]&')
                ans=winio@('%si#%bx&',0.3d0) ! %bx s argumentom výšky pixela (dounle precision-v tomoto prípade 0.3d0, pridá šedý pásik nad textom
                                             ! so zvolenou ikonou, ktorý je nad textom oddeleny ciarou 
                ans=winio@('%nl%ta%sf%cnNie je možné vybra&#357; rovnaký názov výstupného súboru, aký&')
                ans=winio@('%nl%ta má aj vstupný súbor! Mením koncovku súboru na *.csv!&')    
                ans=winio@('%2nl%cn%9`bt[OK]')
              !!!   ans=winio@('%si#%ta%cn%ws&','Nie je možné vybra&#357; rovnaký názov výstupného súboru,')
              !!!   ans=winio@('%nl%ta%cn%ws&','aký má aj vstupný súbor! Koncovka bude automaticky zmenená na ')
              !!!   ans=winio@('%ws&','.csv')
              !!!   ans=winio@(' &')
              !!!   ans=winio@('%2nl%cn%9`bt[OK]')
                CALL SET_SUFFIX@(subor4,'CSV',L)  ! Volanie internej funckie FTN95 SETSUFFIX@ na zmenu koncovky mena vystupneho suboru
       ELSE
	            w=0
      			h=0
	  			ans=winio@('%sz&',w,h)
      			ans=winio@('%ca[Info o zvolenom výstupnom súbore]&')
                ans=winio@('%si!%ta%sf%cnSúbor už existuje! Ak nezmeníte názov súboru, bude prepísaný!&')
                ans=winio@('%2nl%cn%9`bt[OK]')
       END IF
      
     END IF
       
     sb_vstup4=2
     CALL window_update@(subor4)
END Function sb_vstup4

INTEGER FUNCTION cb_znam() ! call-back funkcia pre menu položku  Zmeni&#357; znamienka pre DX a DY
     IMPLICIT NONE
     INTEGER*4 cb_znam, vybrate, ans
     CHARACTER*(1) zmena(2)
     COMMON/cel_cisla2/vybrate
     COMMON/zmena_znam/zmena
     ans=winio@('%ca[Definovanie znamienok pre hodnoty DX a DY]&')
     ans=winio@('%bg[grey]&')
     ans=winio@('%3nl%ta%bf%fn[Courier New]Zmeni&#357; zn. pred DX a DY vo výslednom TXT súbore? (a=áno, n=nie)%5.2ls&',zmena,3l,vybrate)
     ans=winio@('%3nl%cn%9`bt[&OK]')
     CALL window_update@(vybrate)
     cb_znam=2
END FUNCTION cb_znam

INTEGER FUNCTION cb_about() ! Call-back funkcia pre menu položku POMOC/O PROGRAME
     IMPLICIT NONE
     INTEGER*4 cb_about, ans
     ans=winio@('%ca[O programe TXT_2_SGF]&')
     ans=winio@('%fn[Arial]%ts%bf%cnProgram TXT_2_SGF&',2.0d0)
     ans=winio@('%`bf%ts%3nl&',1.0d0)
     ans=winio@('%taVykoná správne zoradenie vstupných údajov X,Y,DX,DY nepravouholníkovej mriežky pokrývajúcej celú SR%nl&')
     ans=winio@('%taa doplní ju na pravouholníkovú mriežku, kde všetky doplnené body mriežky majú hodnoty DX a DY nulové.%nl&')
     ans=winio@('%taPravouholníkový tvar mriežky je nutný pre vytvorenie binárneho SGF (SHIFT GRID FILE) formátu, ktorý sa%nl&')
     ans=winio@('%tav softvéri Trimble Bussines Center používa na transformáciu GNSS geocentrických súradníc do%nl&') 
     ans=winio@('%talokálneho súradnicového systému S-JTSK. Výsledkom konverzie je &#269;itate&#318;ný TXT súbor obsahujúci%nl&')
     ans=winio@('%tapravouholníkovú mriežku s požadovaným zoradením hodnôt súradníc X, Y a ich zmien DX, DY.%2nl&')
     ans=winio@('%taHodnoty v každom bode mriežky sú súradnice X,Y v súradnicovom systéme S-JTSK03 spolu%nl&')
     ans=winio@('%tas príslušnými zmenami DX a DY, ktoré vyjadrujú väzbu na pôvodný súradnicový systém S-JTSK.%2nl&')
     ans=winio@('%taVstupný súbor je v &#269;itate&#318;nom TXT formáte a prvých sedem riadkov obsahuje hlavi&#269;ku, ktorá musí%nl&')
     ans=winio@('%tama&#357; nasledovný formát (hodnoty Xmin, Xmax, Ymin, Ymax, Xkrok, Ykrok môžu by&#357; aj iné):%2nl&')
     ans=winio@('%ta1.riadok obsahuje minimálnu hodnotu súradnice X(S-JTSK03):%taXmin = -1335000 m%nl&')
     ans=winio@('%ta2.riadok obsahuje maximálnu hodnotu súradnice X(S-JTSK03):%taXmax = -1132000 m%nl&')
     ans=winio@('%ta3.riadok obsahuje minimálnu hodnotu súradnice Y(S-JTSK03):%taYmin = -592000 m%nl&')
     ans=winio@('%ta4.riadok obsahuje maximálnu hodnotu súradnice Y(S-JTSK03):%taYmax = -165000 m%nl&')
     ans=winio@('%ta5.riadok obsahuje krok v súradnici X(S-JTSK03):%2taXkrok = 1000 m%nl&')
     ans=winio@('%ta6.riadok obsahuje krok v súradnici Y(S-JTSK03):%2taYkrok = 1000 m%nl&')
     ans=winio@('%ta7.riadok obsahuje NULOVÚ hodnotu%nl&')
     ans=winio@('%ta8.riadok a &#271;alšie až do konca obsahujú konkrétne súradnice X (m), Y(m) v S-JTSK03 v bodoch mriežky %nl&')
     ans=winio@('%taa ich zmeny DX (m), DY (m) vyjadrujúcimi posuny vo&#269;i S-JTSK a musia by&#357; v tvare:%nl&')
     ans=winio@('%ta-1333000 -483000 -0.74 0.25 (odde&#318;ova&#269; hodnôt údajov môže by&#357; medzera alebo &#269;iarka)%3nl&')
     ans=winio@('%ta%bf%tc[red]UPOZORNENIE: Vyššie uvedený vstupný formát údajov MUSÍ by&#357; dodržaný, inak konverzia zlyhá!%nl&')
     ans=winio@('%taVšetky hodnoty súradníc (X,Y) vstupnej mriežky MUSIA by&#357; ZÁPORNÉ celé &#269;ísla (bez desatinných miest)!%2nl&')
     ans=winio@('%ta%tc[black]Autor vstupného TXT súboru nepravouholníkovej mriežky je GKÚ Bratislava.&')
     ans=winio@('%2nl%taAutor konverzného programu TXT_2_SGF: Dr. Ing. Martin Kalafut (martin.kalafut@agis.sk)&')
     ans=winio@('%bg[grey]&')
     ans=winio@('%3nl%cn%9`bt[OK]')
     cb_about=1
END FUNCTION cb_about

INTEGER FUNCTION button1 ()
IMPLICIT NONE
   INTEGER*4 button1, test
   COMMON/testovanie2/test
   test=0          ! prepísanie súboru
   button1=0
END FUNCTION button1

INTEGER FUNCTION button2 ()
   IMPLICIT NONE
   INTEGER*4 button2, test
   COMMON/testovanie2/test
   test = 1             ! súbor sa znovu bude vybera&#357;
   button2=0
END FUNCTION button2
9 May 2020 2:05 #25366

Paul,

probably the code is too long, I am unable to post it by copying it between

and

Could I send you an email with attached source code, if YES, can I send it tp ftn95@silverfrost.com?

Martin

9 May 2020 4:26 #25367

Thanks Martin. I can work with what I have in your last post.

9 May 2020 11:19 #25368

But, when I start the program, initially - I see NO underlined letters in menu (and submenu - if available) items. They (the underlined letters) are ONLY then visible, when I physically press the ALT key on the keyboard first (then they appear and function as expected).

Isn't that normal? The underlines don't appear unless you press Alt.

11 May 2020 8:18 #25371

I think that Robert is right and also that this feature is working correctly for UTF-8. Here is my test program...

winapp
program main
use clrwin
integer i
integer,external::cbfunc
call enable_utf8@(1)
i=winio@('%mn[&Súbor[&Otvori&#357; súbor]]&',cbfunc)
i=winio@('%cn%bt[OK]')
end

integer function cbfunc()
integer i
i = winio@('%bt[ok]')
cbfunc = 2
end
13 May 2020 10:47 #25392

The following may be useful:

Underlining Access Keys In versions of Windows prior to Microsoft Windows 2000, underlined access keys were visible at all times. In Windows 2000 and later versions, users can hide them if they do not use them.

If your application is using standard menus and dialog boxes, the behavior is automatic. However, applications that draw their own custom controls, such as menus and dialog boxes, must explicitly handle this appropriately. When you are deciding where to underline access keys, keep the following situations in mind:

Setting system parameters to display underlining for access keys.

Users can adjust the default settings for underlining through Control Panel. If the system parameter indicates that access keys are always underlined, an application will always display the underline below the access keys. (The default setting hides underlining.)

For information about these settings, see the SPI_GETMENUUNDERLINES or SPI_SETMENUUNDERLINES parameters for the SystemParametersInfo function in the Platform SDK.

Interacting with a menu or dialog box by using the keyboard.

A user can do the following:

Invoke a menu by pressing a key combination such as ALT, F10, or SHIFT+F10. Invoke a menu by using a mouse but then navigate between menus by using the keyboard. After a user interacts with a menu by using the keyboard, all access keys must be underlined until the menu is closed. Press a key to activate another control, such as when pressing the TAB key to move the input focus to the next control or pressing the SPACEBAR key to select an option control. The underline must remain displayed until the user closes the dialog box or container.

I have emphasised part of it. It comes from here:

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/dnacc/guidelines-for-keyboard-user-interface-design#common-keyboard-ui-design-mistakes-and-limitations

Eddie

Please login to reply.