home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 December / Chip_1999-12_cd.bin / obsahy / Chip_txt / TXT / 170.txt < prev    next >
Text File  |  1999-10-21  |  30KB  |  376 lines

  1. Tipy, triky, makra pro aplikace Office, Control Panel 3.1, OS/2 Merlin, Borland C++ Builder 4 a Visual C++5.0 a 6.0.
  2. A jsme tu op╪t s mal∞m náτupem rad, jak si zp²íjemnit i ulehƒit kaºdodenní práci s poƒítaƒem a jeho aplikacemi...
  3.  
  4. Word
  5. Kapitálky
  6. Nadpisy vypadají hezky, jsou-li napsány písmem ve stylu kapitálek. V n╪m jsou vτechna zapsaná malá písmena p²evedena na velká a zapsaná velká písmena jsou v╪tτí. Nap². ZATM╖N╓ SLUNCE V MA╥ARSKU.
  7. Na kapitálky màºeme zm╪nit vybran∞ text p²íkazem FORM╡T|P╓SMO a oznaƒením stylu "Kapitálky". Pouºíváme-li kapitálky ƒast╪ji, je vhodné zm╪nu vyvolat klávesovou zkratkou. Vytvo²íme ji tak, ºe zadáme p²íkaz N╡STROJE|VLASTN╓, stiskneme tlaƒítko "Klávesnice", vyhledáme kategorii "Formát" a p²íkaz "Kapitálky". Zjistíme, ºe od v∞robce softwaru je p²i²azena klávesová zkratka Ctrl+Shift+K, ta vτak ve verzi 97 a 2000 nefunguje. P²i²adíme si tedy jinou. Postavíme kurzor do políƒka "Stiskn╪te klávesovou zkratku" a stiskneme nap². kombinaci kláves Alt+Ctrl+Shift+K. Ta není nikde pouºita. V políƒku "Zm╪ny uloºit do" ponecháme obecnou τablonu "Normal.dot". Volbu potvrdíme tlaƒítkem "P²i²adit" a dvakrát za sebou stiskneme tlaƒítko "Zav²ít". Kdyº nyní oznaƒíme text jako blok a na klávesnici stiskneme zadanou klávesovou zkratku, zformátuje se text na kapitálky.
  8. Poznámka: Ve Wordu verze 5 a 95 kombinace kláves Ctrl+Shift+K funguje. Text se na kapitálky zformátuje.
  9.  
  10. Symbol
  11. Pokud ƒasto pouºíváme n╪jak∞ znak, nap². telefon, obálky, τipky, nemusíme zadávat p²íkaz VLOªIT|SYMBOL, na kart╪ "Symbol" vybrat znakovou sadu Wingdings, oznaƒit znak, stisknout klávesu "Vloºit" a následn╪ "Zav²ít". Màºeme si pro tyto znaky vytvo²it klávesovou zkratku.
  12. Zadáme p²íkaz VLOªIT|SYMBOL, na kart╪ "Symboly" vybereme písmo, nap². Wingdings, a oznaƒíme symbol, pro kter∞ chceme klávesovou zkratku vytvo²it (nap²íklad telefon). Stiskneme tlaƒítko "Klávesová zkratka", do políƒka "Stiskn╪te klávesovou zkratku" (ve verzi 5 a 95 "Stiskn╪te novou klávesovou zkratku") umístíme kurzor a stiskneme klávesy, nap². Alt+Ctrl+Shift+T. V políƒku "Zm╪ny uloºit do" ponecháme obecnou τablonu "Normal.dot". Stiskneme tlaƒítko "P²i²adit", "Zav²ít" a jeτt╪ jednou "Zav²ít". Po stisku zadané kombinace kláves je nyní znak do textu vloºen bez nutnosti cokoli vybírat a zkratka je pouºitelná v libovolném nov╪ zaloºeném dokumentu.
  13.  
  14. Obrázek
  15. Pro vkládání obrázku ze souborà se pouºívá p²íkaz VLOªIT|OBR╡ZEK|ZE SOUBORU (ve verzi 5 a 95 VLOªIT|OBR╡ZEK), následuje vyhledání sloºky a obrázku. I tuto ƒinnost lze usnadnit pouºitím klávesové zkratky. Zadáme p²íkaz N╡STROJE|VLASTN╓ (ve verzi 5 N╡STROJE|UPRAVIT), stiskneme tlaƒítko "Klávesnice" (ve verzi 5 a 95 je to karta "Klávesnice"), vybereme kategorii "Vloºit" (ve verzi 5 "Vloºení") a p²íkaz "Vloºit obrázek" (ve verzi 5 a 95 jde o p²íkaz "InsertPicture") a do políƒka "Stiskn╪te klávesovou zkratku" (ve verzi 5 a 95 "Stiskn╪te novou klávesovou zkratku") uvedeme nap². Alt+Ctrl+ Shift+O. V políƒku "Zm╪ny uloºit do" ponecháme obecnou τablonu "Normal.dot". Volbu potvrdíme tlaƒítkem "P²i²adit" a dvakrát za sebou stiskneme tlaƒítko "Zav²ít".
  16. Nyní se po stisku zadané klávesové zkratky zobrazí p²ímo posledn╪ pouºitá sloºka s obrázky, lze je tedy vkládat velice operativn╪.
  17. Zobrazíme-li p²íkaz VLOªIT|OBR╡ZEK|ZE SOUBORU (ve verzi 5 a 95 VLOªIT|OBR╡ZEK), bude po jeho stran╪ námi zvolená klávesová zkratka.
  18.  
  19. Zruτení dopln╪n∞ch klávesov∞ch zkratek
  20. Vτechny klávesové zkratky, tedy jak pro formátování a vloºení znaku, tak pro p²íkaz, zruτíme velice snadno. Zadáme p²íkaz N╡STROJE|VLASTN╓, stiskneme tlaƒítko "Klávesnice" a následn╪ tlaƒítko "Obnovit vτe". Návrat ukonƒíme tlaƒítky "Zav²ít".
  21. Uvedené návody màºete vzít jako nám╪t nebo inspiraci pro zjednoduτení zadávání jin∞ch akcí.
  22.  
  23. Excel
  24. Excel 2000 spustit jen 1x
  25. Aplikaci Excel 2000 màºeme spustit v nabídce START|PROGRAMY|MICROSOFT EXCEL, stiskem tlaƒítka v panelu zástupcà Office, nebo pokud jsme vytvo²ili zástupce na pracovní ploτe, stiskem této ikony. Soubory otev²eme poklepáním na n╪ v pràzkumníku nebo po zadání p²íkazu SOUBOR|OTEVⁿ╓T.
  26. Kaºd∞ seτit má své tlaƒítko na hlavním panelu Windows. Mezi seτity lze p²epínat stiskem tohoto tlaƒítka nebo klávesovou zkratkou Alt+Tab.
  27. Excel bychom m╪li spustit jen jednou. Nesmíme opakovan╪ pouºít v∞τe uvedené postupy, nebo£ by se Excel spustil znovu a u poƒítaƒe neopl∞vajícího velkou vnit²ní pam╪tí by doτlo ke zpomalení reakcí.
  28. Ve Wordu 2000 toto nebezpeƒí nehrozí. Aplikace se spustí vºdy jen jednou, by£ ji znovu spustíme z nabídky START|PROGRAMY.
  29.  
  30. Skok na poslední buσku v. 5, 95, 97 a 2000
  31. Na nejzazτí buσku s daty (poslední sloupec a poslední ²ádek) p²esuneme buσkov∞ kurzor klávesovou zkratkou Ctrl+End. Zruτíme-li hodnotu v této buσce, budeme se touto klávesovou zkratkou p²esouvat stále na poslední buσku, by£ je jiº prázdná.
  32. Staƒí vτak seτit uloºit, nap². klávesovou zkratkou Ctrl+S nebo klasicky p²íkazem SOUBOR|ULOªIT, a buσkov∞ kurzor se bude p²esouvat na skuteƒn╪ poslední zapln╪nou buσku na listu.
  33.  
  34. Automaticky otevíran∞ soubor
  35. Pracujeme-li delτí dobu s n╪jak∞m souborem, màºeme si jeho otevírání usnadnit. Otev²eme ho jiº p²i spuτt╪ní Excelu. V Excelu existuje sloºka XLStart a soubory do ní uloºené se p²i spuτt╪ní Excelu automaticky otev²ou.
  36. Sloºka pro automatické otevírání souborà je podle verzí Excelu:
  37. v. 5: C:\excel\xlstart.
  38. v. 95: C:\MSOffice\Excel\XLStart.
  39. v. 97: C:\Program Files\Microsoft Office\Office\XLStart.
  40. Verze 2000 je zajímavá tím, ºe má dv╪ sloºky XLStart. Jedna je na cest╪ C:\Windows\Application Data\Microsoft\Excel\XLStart a druhá C:\Program Files\Microsoft Office\Office\XLStart. Je lhostejné, do které sloºky soubor umístíme - vºdy se p²i spuτt╪ní Excelu vτechny soubory umíst╪né v uveden∞ch sloºkách otev²ou.
  41. Automaticky se t麠otev²ou vτechny soubory, se kter∞mi màºe Excel pracovat, umístíme-li je do sloºky zapsané na kart╪ "Obecné" v poloºce "Alternativní umíst╪ní spouτt╪cích souborà" (po zadání p²íkazu N╡STROJE|MOªNOSTI). Ve verzi 5 jde o p²íkaz N╡STROJE|PⁿEDVOLBY, karta "Obecné" a poloºka "Druhé umíst╪ní souborà", a ve verzi 95 o p²íkaz N╡STROJE|MOªNOSTI, karta "Obecné", poloºka "Druhé umíst╪ní souborà".
  42.  
  43. Automatizace ve Word 97 a 2000 cz
  44. Automatizace p²i psaní
  45. Word umoºσuje n╪které ƒinnosti automatizovat. Zapíτeme-li *text* (text ve hv╪zdiƒkách bez mezer), hv╪zdiƒky zmizí a dojde k automatickému p²eformátování na "tuƒné" písmo. Pouºijeme-li na zaƒátku a konci slova podtrºítka, ²ez slova se zm╪ní na kurzívu. Tato úprava se vτak automaticky provede jen tehdy, kdyº po zadání p²íkazu N╡STROJE|AUTOMATICKÉ OPRAVY, je na kart╪ "P²i psaní" oznaƒeno políƒko "*Tuƒné* a _ kurzívu _ skuteƒn∞m formátováním".
  46. Spodní ƒáru pod odstavcem lze vytvo²it automaticky. Nejprve zkontrolujeme, zda je po zadání p²íkazu N╡STROJE|AUTOMATICKÉ OPRAVY na kart╪ "P²i psaní" oznaƒena poloºka "Ohraniƒení". Stiskneme-li potom opakovan╪ (min. 3x) n╪kter∞ z t╪chto znakà, zakreslí se ƒára. 
  47. -    pomlƒka    tenká ƒára
  48. _    podtrºítko    tlustá ƒára
  49. =    rovnítko     dvojitá ƒára
  50. *    hv╪zdiƒka    tlustá p²eruτovaná                             ƒára
  51. #                tenká-tlustá-tenká
  52. ~    tilda         vlnovka
  53. Ty se vytvo²í pod odstavcem nad t╪mito znaky. 
  54. Pokud budeme chtít ƒáru pod odstavcem smazat, nemàºeme pouºít klávesu Delete nebo Backspace. Se zruτením ƒar se nebudeme trápit. Postavíme kurzor do podtrºeného odstavce, zadáme p²íkaz FORM╡T | OHRANI¼EN╓ A ST╓NOV╡N╓ a na kart╪ "Ohraniƒení" stiskneme tlaƒítko "ªádné" nebo klepneme myτí na obrázek. ¼áru tak zruτíme.
  55. Psaní ƒíslovan∞ch seznamà si màºeme zjednoduτit. Op╪t zadáme p²íkaz N╡STROJE|AUTOMATICKÉ OPRAVY, na kart╪ "P²i psaní" oznaƒíme pole "Automaticky ƒíslování". Zapíτeme-li zkraje odstavce ƒíslo nebo písmeno (malé nebo velké) následované teƒkou a mezerou nebo tabulátorem, tak se po stisku klávesy Enter zm╪ní na ƒíslovan∞ (ƒi abecední) seznam a automaticky se vytvo²í dalτí poloºka. Vytvá²ení ukonƒíme opakovan∞m stiskem klávesy Enter (2x) nebo smazáním poslední poloºky klávesou Backspace.
  56.  
  57. P²i psaní jsou vτak zvláτtnosti:
  58. ? Pouºijeme-li jako první znak písmeno i, resp. I, obdrºíme ƒíslování ²ímsk∞mi ƒíslicemi, mal∞mi resp. velk∞mi.
  59. ? Pokud nezaƒneme od jedniƒky, musíme pro vyvolání ƒíslování pouºít za ƒíslicí tabulátor. Pouºijeme-li mezeru, k automatickému ƒíslování nedojde.
  60. ? Pokud nezaƒneme od písmene a, resp. A, musíme za písmenem pouºít tabulátor. Pouºijeme-li mezeru, k automatickému oznaƒení nedojde.
  61. ? P²edchází-li vytvá²enému seznamu jin∞ seznam a zapíτeme ƒíslici o jednotku v╪tτí, resp. dalτí písmeno v abeced╪, vyhodnotí procesor, ºe chceme v ƒíslování pokraƒovat a na p²edchozí seznam naváºe. Zde pouºijeme k odd╪lení mezeru. Mezi seznamy màºe b∞t i n╪kolik odstavcà textu. (Platí jen pro Word verze 2000.)
  62. Jsou vτak situace, kdy nám màºe automatické ƒíslování vadit. Nap². p²i psaní strukturovaného ºivotopisu. Napíτeme rok ƒi ƒasov∞ interval, odskok provedeme klávesou Tabulátor, zapíτeme ƒinnost a po stisku klávesy Enter máme dopln╪n∞ rok (nebo interval) o jednotku v╪tτí. Vrátíme se zp╪t a po stisku klávesy Enter to vyjde nastejno. Pomoc je p²itom snadná - zruτíme oznaƒení poloºky "Automaticky ƒíslování".
  63. Na kart╪ "P²i psaní" je t麠poloºka "Automaticky odráºky". P²i oznaƒené poloºce máme usnadn╪né psaní odráºek. Zapíτeme-li zkraje odstavce vybrané znaky, za nimi mezeru nebo tabulátor, zm╪ní se po stisku klávesy Enter na odráºky a automaticky se vytvo²í dalτí odráºka. Seznam ukonƒíme opakovan∞m stiskem klávesy Enter (2x) nebo smazáním poslední odráºky klávesou Backspace. A nyní ke znakàm: * (hv╪zdiƒka) se zm╪ní na ? (puntík), > na ?, - (pomlƒka) bude zachovaná, - (dv╪ pomlƒky) vytvo²í ? a písmeno "o" následované tabulátorem vytvo²í ?. Jedno²ádkovou tabulku vytvo²íme snadno zápisem série pomlƒek (rovnítek ƒi podtrºítek) a znamének plus, kde kaºdá dvojice znamének plus odpovídá jednomu sloupci. Po stisku klávesy Enter se automaticky vytvo²í tabulka. Orientaƒn╪ pro zápis jednoho ƒísla do tabulky pot²ebujeme dv╪ pomlƒky. Nap².: +--+--+. Automatické vytvá²ení tabulek vypneme p²íkazem N╡STROJE|AUTOMA- TICKÉ OPRAVY, kde na kart╪ "P²i psaní" zruτíme oznaƒení poloºky "Tabulky". 
  64. Dalτí sloupce a ²ád-ky doplníme p²íkazem TABULKA|VLOªIT SLOUPCE, VLOªIT ⁿ╡DKY a u verze Wordu 2000 p²íkazy TABULKA|VLOªIT|SLOUPCE NALEVO, SLOUPCE NAPRAVO, ⁿ╡DKY NAD A ⁿ╡DKY POD.
  65. A jeτt╪ k protivn∞m velk∞m písmenàm po teƒkách za ƒíslicemi ve v╪t╪. To souvisí s poloºkou "Velká písmena na zaƒátku v╪t" na kart╪ "Opravy" po zadání p²íkazu Nástroje|Automatické opravy. Zruτme oznaƒení poloºky a je po problému. No, zaƒátek v╪t musíme kontrolovat jiº sami.
  66. Perliƒka na záv╪r. Kdyº se na Vás bude n╪kdo vytahovat, tak mu ud╪lejte malou zlomyslnost. Ve Wordu zadejte p²íkaz N╡STROJE|AUTOMATICKÉ OPRAVY a na kart╪ "Opravy" do políƒka "Nahrazovat" zapiτte 1 a do políƒka "za:" napiτte "Nazdar µmoulo!. ¼i jinou vtipnou sentenci. Zápis potvrdíme stiskem tlaƒítka "P²idat". Nyní, kdyº ve Wordu, ale i v Excelu nebo£ jsou náhrady spoleƒné, napíτete 1 zobrazí se ona sentence. A te╘ a£ se "vejtaha" ukáºe! Neºádoucí náhradu odstraníme tak, ºe ji na kart╪ "Opravy" vybereme a stiskneme tlaƒítko "Odstranit".
  67. V╪tτinu t╪chto moºností poskytuje i Word 95 (resp. jeho pàvodní oznaƒení v. 7), i kdyº se v dialogov∞ch oknech tyto moºnosti nenastavují. V této verzi nelze vytvá²et tabulky zápisem znakà.
  68. Milan Broº
  69.  
  70. Control Panel 3.1
  71. P╪kné nové logo
  72. P╪kné firemní logo, které se zobrazuje p²i startu, je nedílnou souƒástí kaºdého sluτného operaƒního systému. Control Panel verze 3.x (CP) není samoz²ejm╪ ºádnou v∞jimkou. Pokud vτak pracujete s CP intenzivn╪ (neustále opakovan∞ pohled na jeden obrázek není p²íliτ vzruτující), màºe vás zobrazované logo zaƒít rozƒilovat. P²itom kaºd∞ uºivatel màºe snadno donutit svàj CP, aby zaƒal zobrazovat tém╪² libovoln∞ zajímav∞ obrázek jako logo. Staƒí dodrºet následující postup:
  73. 1. Firemní logo je uloºeno jako obrázek v souboru CPLOGO.LGO, kter∞ je umíst╪n v adresá²i C:\CP. Systém CP vτak grafick∞ formát LGO vàbec nezná. Musíme si tedy uv╪domit, ºe za p²íponou LGO se skr∞vá jin∞ grafick∞ formát - InView icon formát (*.ICO).
  74. 2. Pàvodní soubor CPLOGO.LGO p²ejmenujeme na CPLOGO.LXX.
  75. 3. Nyní si vybereme svàj oblíben∞ obrázek v grafickém formátu PCX, GIF, TIF, BMP, SCR, IMG (InView), JPG, PNG, WPG, TGA, CUT, MAC nebo XBM. Fyzická velikost budoucího loga vτak musí odpovídat grafickému rozliτení, které v rámci CP pouºíváme. Jestliºe pouºíváme grafick∞ reºim 800 x 600 bodà, maximální rozumná velikost loga je asi 570 x 400 bodà.
  76. 4. Vybran∞ obrázek v CP naƒteme do pomocné aplikace Obrázek. Ov╪²íme si velikost obrázku a jeho neporuτenost. Funkcí Uloºit jako (horká klávesa Ctrl+A) aktivujeme dialogové okno. Zde zvolíme typ souboru - InView icon formát.
  77. 5. Následn╪ se objeví dialog - Uloºení obrázkà. Zde nastavíme reºim 256 barev a ponecháme pàvodní velikost obrázku *.ICO (ikony).
  78. 6. Po uloºení obrázku ukonƒíme prost²edí CP a v libovolném souborovém manaºeru p²ejmenujeme práv╪ vytvo²en∞ obrázek na CPLOGO.LGO.
  79. 7. Nyní se p²i startu CP bude vºdy zobrazovat naτe p╪kné nové logo.
  80. Tento trik perfektn╪ funguje i v systému CP 3.0.
  81.  
  82. Merlin
  83. Seznam definovan∞ch tiskáren
  84. Mezi nejdàleºit╪jτí vlastnosti kaºdého OS nepochybn╪ pat²í schopnost kvalitního tisku dokumentà na drtivé v╪tτin╪ dnes pouºívan∞ch inkoustov∞ch a laserov∞ch tiskáren. Prakticky kaºd∞ OS nabízí sv∞m uºivatelàm grafické nástroje, které umí zobrazit kompletní seznam aktuáln╪ p²ipojen∞ch tiskáren s komfortními moºnostmi jejich nastavení. Do horτí situace se ovτem dostane uºivatel, kter∞ pot²ebuje získat seznam tiskáren v rámci celoobrázkové textové relace. Proto vás moºná pot╪τí následující REXX program TISKARNA.CMD, kter∞ vypíτe vτechny tiskárny definované v systému. U kaºdé tiskárny navíc zobrazí port, frontu a ovladaƒ tiskárny.
  85. Program je nutné vytvá²et v textovém editoru, kter∞ podporuje ƒisté ASCII 
  86. (nap². Systémov∞ editor EPM). Ve vτech programech vytvo²en∞ch v jazyku REXX musí b∞t na prvním míst╪ komentá² zaƒínající znaky "/*", takºe neodstraσujte úvodní komentá²e. V novém prost²edí Object REXX funguje program bez problémà.
  87.  
  88. /* TISKARNA.CMD */
  89. /* Autor: Michal Poho²elsk∞ */
  90. /* Vytvo²eno pro systém OS/2 Merlin 4.0 */
  91. /* Program v textové relaci vypíτe seznam
  92.  vτech tiskáren definovan∞ch v systému. */
  93. /* Aktivuji knihovnu funkcí REXXUTIL */
  94.  
  95. IF RxFuncQuery("SysLoadFuncs") THEN
  96. DO
  97. CALL RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  98. CALL SysLoadFuncs
  99. END
  100. /* ---------------- */
  101. CALL SysCls
  102. CALL SysIni "BOTH","PM_SPOOLER_ 
  103. PRINTER","ALL:","printers"
  104. PARSE VALUE SysIni("BOTH","PM_ 
  105. SPOOLER","PRINTER") WITH default ";"
  106.  
  107. default = STRIP(default)
  108. maxdelka = 8
  109.  
  110. DO i = 1 TO printers.0
  111. hodnota = printers.i
  112. PARSE VALUE SysIni("BOTH","PM_ SPOOLER_PRINTER_DESCR",hodnota),
  113. WITH printerd.val ";"
  114. printerd.val = SPACE(TRANSLATE (printerd.val," ","0d0a"x))
  115. IF hodnota == default THEN
  116. printerd.val = printerd.val "[default]"
  117. maxdelka = MAX(maxdelka,LENGTH(printerd.val))
  118. END
  119.  
  120. hlavicka = "Jmeno"||COPIES(" ",maxdelka-4) ||,
  121. "Port    Fronta Ovladac tiskarny"
  122.  
  123. SAY hlavicka
  124. SAY COPIES("-", LENGTH(hlavicka))
  125.  
  126. DO i = 1 TO printers.0
  127. hodnota = printers.i
  128. PARSE VALUE SysIni("BOTH","PM_ SPOOLER_PRINTER", hodnota),
  129. WITH port ";" driver ";" Queue ";"
  130. SAY LEFT(printerd.val,maxdelka) LEFT(strip(port),8),
  131. LEFT(STRIP(queue),8) STRIP(driver)
  132. END
  133. EXIT 0
  134.  
  135. Manipulace s adresá²i
  136. Uºivatelé operaƒního systému t²ídy DOS (MS-DOS, PC-DOS, Novell DOS) si jiº dlouho mohou p²ejmenovat libovoln∞ soubor (soubory) pomocí vτeobecn╪ známého interního p²íkazu - RENAME. P²estoºe tento p²íkaz byl jiº samoz²ejmou souƒástí systému MS-DOS 3.0, kter∞ byl aktuální v roce 1985, dodnes se p²i jeho pouºití uºivatelé musí smi²ovat s jedním nedostatkem. Práce se soubory je sice jednoduchá, ale s p²ejmenováním adresá²à je to v∞razn╪ horτí. Název adresá²e je prost╪ "nedotknuteln∞".
  137. Uºivatelé OS/2 jsou ovτem ve v∞hod╪. V rámci textové DOS relace màºe uºivatel pouºít u p²íkazu RENAME nedokumentovan∞ parametr
  138.  
  139. RENAME /S,
  140.  
  141. kter∞ donutí p²íkaz p²ejmenovat libovoln∞ adresá². P²íkaz lze uveden∞m zpàsobem pouºívat v OS/2 Warp 3.0 i v OS/2 Merlin 4.0. V textové relaci OS/2 uveden∞ parametr nefunguje, protoºe p²ejmenovávat adresá²e zde pat²í mezi samoz²ejmé schopnosti identického p²íkazu.
  142.  
  143. P²epínání mezi aplikacemi
  144. Mezi mén╪ viditelné, ale p²esto velmi p²íjemné novinky systému OS/2 Merlin pat²í p²epínání programà pomocí klávesové zkratky Alt+Tab, kterou dob²e znají uºivatelé Windows. Díky tomu lze snadn╪ji p²ejít z 16bitov∞ch Windows do pln╪ 32bitového prost²edí OS/2. P²epínání programà pomocí Alt+Tab vτak bohuºel funguje pouze v grafickém prost²edí. Uºivatelé textov∞ch aplikací (OS/2 i DOS) tedy mají smàlu.
  145. Naτt╪stí vτak existuje freewarov∞ prográmek LSwitcher  verze 1.0, kter∞ umí uvedené omezení jednoduτe obejít. Staƒí umístit soubor LSWITCH.EXE do sloºky Spustit p²i startu, upravit ve stejném duchu systémov∞ DOS soubor AUTOEXEC.BAT a ukonƒit práci systému. Po novém startu màºeme vesele pouºívat zkratku Alt+Tab v jakékoliv situaci. Jestliºe stiskneme klávesu Shift souƒasn╪ s Alt+Tab, p²epínání programà bude probíhat v obráceném po²adí. Program LSwitcher je moºné s menτím komfortem vyuºívat i v OS/2 Warp 3.0. V p²ípad╪ pot²eby lze LSwitcher snadno deaktivovat souƒasn∞m stisknutím Ctrl+Alt+U.
  146.  
  147. Grafick∞ reºim systému
  148. Nastavení vhodného grafického rozliτení, které optimáln╪ vyuºívá schopností monitoru i grafické karty a zároveσ je ergonomické, pat²í mezi základní starosti kaºdého uºivatele v libovolném grafickém operaƒním systému. V╪tτina systémà vƒetn╪ OS/2 p²itom nabízí komfortní nástroje umoºσující optimální volbu grafického reºimu. Ve v∞razn╪ horτí situaci se vτak ocitne uºivatel, kter∞ pot²ebuje v rámci textové relace zjistit nastavené grafické rozliτení. Krom╪ toho získaná informace o grafickém rozliτení màºe b∞t zkreslená, protoºe nastavené hodnoty nemusí vºdy odpovídat aktuálnímu reºimu.
  149. Proto jsem vytvo²il následující REXX program GRAFIKA2.CMD, kter∞ se s tímto problémem dokáºe kompletn╪ vypo²ádat. Program je nutné vytvá²et v textovém editoru, kter∞ podporuje ƒisté ASCII (nap². Systémov∞ editor EPM). Ve vτech programech vytvo²en∞ch v jazyku REXX musí b∞t na prvním míst╪ komentá² zaƒínající znaky "/*", takºe neodstraσujte úvodní komentá²e. V novém prost²edí Object REXX funguje program bez problémà.
  150.  
  151. /* GRAFIKA2.CMD */
  152. /* Autor: Michal Poho²elsk∞ */
  153. /* Vytvo²eno pro systém OS/2 Merlin 4.0 */
  154. /* Program na obrazovku vypíτe aktuální grafické
  155. rozliτení systému. */
  156. /* Aktivuji knihovnu funkcí REXXUTIL */
  157.  
  158. IF RxFuncQuery("SysLoadFuncs")  THEN
  159. DO
  160. CALL RxFuncAdd "SysLoadFuncs", "RexxUtil", "SysLoadFuncs"
  161. CALL SysLoadFuncs
  162. END
  163. /* ---------------- */
  164. /* Získávám systémové rozliτení */
  165. PARSE VALUE GrafickeRozliseniSys() with XR YR PocetBarev ZGrRozliseni
  166. /* Zobrazuji aktuální grafick∞ reºim */
  167. CALL SysCls
  168. SAY " ";SAY " "
  169. SAY " System nyni pracuje v grafickem rozliseni: " ||,
  170. XR || "x" || YR || " s " || PocetBarev || " barvami"
  171. /* Zobrazuji varování o platnosti zobrazen∞ch údajà */
  172. IF ZGrRozliseni = 1 THEN
  173. DO
  174. SAY " "
  175. SAY " POZOR ! Uvedene rozliseni neni platne, protoze nebyl proveden"
  176. SAY " novy start systemu !"
  177. SAY " Ukoncete, prosim, cinnost vsech aplikaci. Potom ukoncete praci"
  178. SAY " systemu a stisknete RESET."
  179. SAY " Po novem spusteni zacne system pouzivat zobrazene rozliseni !"
  180. END
  181. EXIT 0
  182.  
  183. /* Hlavní procedura programu */
  184. GrafickeRozliseniSys: PROCEDURE
  185. PARSE VALUE 0 0 0 0 WITH XHodnota YHodnota PocetBarev ZmenaPlatnosti
  186. /* Instaluji lokální error handler */
  187. SIGNAL ON SYNTAX NAME InterniChybaObrazovky
  188. /* Naƒítám binární hodnoty grafického rozliτení */
  189. HodnotaEntryInBin = SysIni( "USER" ,,
  190. "PM_DISPLAYDRIVERS" ,,
  191. "DEFAULTSYSTEMRESOLUTION" )
  192. /* Ov╪²uji aktivní platnost nastaveného graf. rozliτení */
  193. ZGrRozliseni = SysIni( "USER" ,,
  194. "PM_DISPLAYDRIVERS" ,,
  195. "RESOLUTION_CHANGED" )
  196.  
  197. IF ZGrRozliseni = "1" || "00"x then
  198. ZGrRozliseni = 1
  199. ELSE
  200. ZGrRozliseni = 0
  201.  
  202. /* Konvertuji binární hodnoty na HEX hodnoty */
  203. HodnotaEntryInHex = c2x( HodnotaEntryInBin )
  204. PARSE VAR HodnotaEntryInHex 1 XHodnota,
  205. 9 YHodnota,
  206. 17 PocetBarev,
  207. 25 NeznamaHod1,
  208. 33 NeznamaHod2
  209.  
  210. /* Konvertuji hexadecimální hodnoty na normální */
  211. XHodnota = x2d( LSB_MSB( XHodnota ))
  212. YHodnota = x2d( LSB_MSB( YHodnota ))
  213. PocetBarev = x2d( LSB_MSB( PocetBarev ))
  214. /* Nepovedlo se získat pot²ebné údaje */
  215. NeznamaHod1 = x2d( LSB_MSB( NeznamaHod1 ))
  216. NeznamaHod2 = x2d( LSB_MSB( NeznamaHod2 ))
  217. /* Následující kód se aktivuje p²i libovolné chyb╪ */
  218.  
  219. InterniChybaObrazovky:
  220. RETURN XHodnota YHodnota PocetBarev ZGrRozliseni
  221.  
  222. LSB_MSB: PROCEDURE
  223. RETURN strip( translate( "12345678", arg(1), "78563412" ))
  224.  
  225. P²esm╪rování diskov∞ch operací
  226. Manipulacím s logick∞mi disky se obƒas nevyhne ºádn∞ uºivatel moderního poƒítaƒe. Uºivatelé operaƒního systému 
  227. OS/2 a starτích verzí systému MS-DOS (verze 3.2, 3.3, 4.01 a 5.0) mají k dispozici zajímav∞ p²íkaz ASSIGN. Tento DOS p²íkaz slouºí k p²esm╪rování operací z urƒeného diskového za²ízení na jiné diskové za²ízení tak, ºe p²i²adí písmeno jednotky jiné jednotce. P²íkaz rovn╪º skryje skuteƒn∞ typ za²ízení p²ed p²íkazy, které pracují s aktuálními infor- macemi o diskov∞ch jednotkách. P²estoºe je ASSIGN podrobn╪ popsán v grafické nápov╪d╪ systému OS/2 Warp i OS/2 Merlin, nenajdete v ní informace o nedokumentovaném parametru:
  228.  
  229. ASSIGN /S
  230.  
  231. Uveden∞ parametr umí zobrazit aktuální aktivitu p²íkazu (S = STATUS) v textové relaci. P²íkaz lze uveden∞m zpàsobem pouºívat v OS/2 Warp 3.0 i v OS/2 Merlin 4.0.
  232.  
  233. Editor KLASIK v prost²edí WPS
  234. V souƒasné dob╪ pracuje v╪tτina textov∞ch editorà v grafickém prost²edí Windows, OS/2 nebo XWindow, které nep²edstavuje pro procesor Pentium v∞znamnou zát╪º. Znaƒná ƒást zbyl∞ch editorà pracuje v grafickém reºimu pod systémem DOS. Tyto zbylé textové editory mohou b∞t samoz²ejm╪ také spouτt╪ny z textové DOS relace pod systémem OS/2 Merlin a není p²itom dàleºité nastavení ƒeτtiny.
  235. Pouºíváme-li ƒesk∞ textov∞ editor KLASIK verze 3.0, kter∞ normáln╪ pracuje v reºimu VGA, màºeme ovτem narazit na fatální problémy. V editoru KLASIK màºeme v menu Aplikace zvolit funkci Nastavení systému, která obsahuje subfunkci Obrazovka. Kdyº v rámci subfunkce Obrazovka nastavíme reºim VESA VBE (800 x 600 s 16 barvami, 640 x 400 s 256 barvami, 640 x 480 s 256 barvami nebo 800 x 600 s 256 barvami), p²ikáºeme sice editoru pracovat od p²íτtího spuτt╪ní v definovaném grafickém rozliτení, ale tím si zároveσ znaƒn╪ zkomplikujeme ºivot. KLASIK pracující v reºimu VESA VBE totiº nesnáτí p²epínání úloh pomocí Seznamu oken ve WPS p²es známou zkratku kláves CTRL+ESC. P²epnutí do WPS pracuje bez problémà, ale p²i návratu do editoru KLASIK dojde k jeho "zatuhnutí" a jedinou moºností je násilné ukonƒení DOS relace s rizikem, ºe otev²en∞ textov∞ soubor bude poτkozen. P²itom v reºimu VGA se KLASIK chová zcela korektn╪. Proto doporuƒuji pouºívat KLASIK v rámci OS/2 (Merlin ƒi Warp) pouze ve standardním reºimu VGA.
  236. Michal Poho²elsk∞
  237.  
  238. Borland C++ Builder 4:
  239. Zp╪tná kompatibilita
  240. V naτí recenzi Borland C++ Builderu 4 (Chip 4/99) jste si mohli vτimnout poznámky o tom, ºe knihovna VCL verze 4.0 není pln╪ kompatibilní s knihovnou VCL 3.0. Podívejme se na rozdíly mezi nimi podrobn╪ji. P²itom budeme hovo²it o p²enosu projektà z C++ Builderu 3 do C++ Builderu 4; p²enos opaƒn∞m sm╪rem bude spíτe vzácností.
  241.  
  242. Nové vlastnosti
  243. První zm╪na spoƒívá v tom, ºe komponenty v nové verzi mohou mít n╪které nové vlastnosti (property) - màºeme nap². definovat kotvy (vlastnost Anchors), màºeme p²edepsat maximální nebo minimální velikost (vlastnost Constraints) atd.
  244. Nové vlastnosti ovτem nebrání p²enosu projektu z verze 3.0 do verze 4.0, nebo£ implicitní hodnoty nov∞ch vlastností jsou takové, ºe se komponenty chovají stejn╪ jako v p²edchozí verzi.
  245.  
  246. Vytvá²ení oken
  247. P²i p²enosu projektà z verze 3 do verze 4 narazíme na podivné chování oken p²i vytvá²ení - p²esn╪ji na zm╪n╪né po²adí volání konstruktoru, resp. destruktoru okna a vzniku událostí OnCreate, resp. OnDestroy. Rozdíl v chování obou verzí si nejsnáze p²edvedeme na jednoduchém programu. Vytvo²íme nov∞ projekt volbou File | New Application; souboràm i formulá²i ponecháme pro jednoduchost jména, která pro n╪ navrhne prost²edí. Pak otev²eme hlaviƒkov∞ soubor Unit1.h a do definice t²ídy okna doplníme deklaraci destruktoru
  248. virtual __fastcall TForm1();
  249. V inspektoru objektà p²ejdeme na kartu Events (události) a vytvo²íme handlery pro události OnCreate a OnDestroy. Konstruktor, destruktor a oba handlery budou mít jedin∞ úkol 
  250. - vypsat zprávu o tom, ºe se tato funkce volá:
  251. __fastcall TForm1::TForm1(TComponent* Owner)
  252. : TForm(Owner)
  253. {
  254. Application->MessageBox("Konstruktor TForm1", "Práv╪ te╘", MB_OK);
  255. }
  256.  
  257. void __fastcall TForm1::FormCreate(TObject *Sender)
  258. {
  259. Application->MessageBox("OnCreate", "Práv╪ te╘", MB_OK);
  260. }
  261.  
  262. __fastcall TForm1::~TForm1()
  263. {
  264. Application->MessageBox("Destruktor TForm1", "Práv╪ te╘", MB_OK);
  265. }
  266.  
  267. void __fastcall TForm1::FormDestroy(TObject *Sender)
  268. {
  269. Application->MessageBox("OnDestroy", "Práv╪ te╘", MB_OK); 
  270. }
  271.  
  272. P²eloºíme-li tento program v C++ Builderu 3.0, objeví se p²i spuτt╪ní zprávy v po²adí 
  273.  
  274. Konstruktor TForm1
  275. OnCreate
  276.  
  277. a p²i ukonƒení
  278.  
  279. OnDestroy
  280. Destruktor TForm1
  281.  
  282. Jestliºe tento projekt p²eneseme do C++ Builderu 4.0, p²eloºíme ho a spustíme, objeví se p²i spuτt╪ní zprávy v po²adí 
  283.  
  284. OnCreate
  285. Konstruktor TForm1
  286.  
  287. a p²i ukonƒení
  288.  
  289. Destruktor TForm1 
  290. OnDestroy
  291.  
  292. Tato zm╪na màºe p²inést nep²íjemné potíºe: N╪které programy, vytvo²ené ve verzi 3, sice bez problémà p²eloºí i v C++ Builderu verze 4, avτak po spuτt╪ní ohlásí nap². poruτení ochrany pam╪ti, nebo£ se pokusí pracovat s komponentami, které jeτt╪ nebyly vytvo²eny.
  293. ⁿeτení je jednoduché. T²ída okna obsahuje vlastnost OldCreateOrder typu bool, která urƒuje, kdy nastane událost OnCreate, resp. OnDestroy. Tato vlastnost má zajiτ£ovat zp╪tnou kompatibilitu s C++ Builderem verze 1, z jak∞chsi záhadn∞ch dàvodà se vτak nastavuje na true p²i p²enosu projektu z verze 3 do verze 4. Nezb∞vá tedy, neº zm╪nit ji ruƒn╪. 
  294.  
  295. Metody a funkce
  296. Dalτí zm╪na, o které budeme hovo²it, se t∞ká nov∞ch parametrà u n╪kolika metod a globálních funkcí. Následující tabulka ukazuje jejich p²ehled.
  297.  
  298. TControl::BeginDrag
  299. TFieldDef::CreateField
  300. TClientDataSet::AddIndex
  301. TClientDataSet::CloneCursor
  302. TClientDataSet::LoadFromFile
  303. TClientDataSet::SaveToFile
  304. TTable::AddIndex
  305. DatabaseError
  306. DatabaseErrorFmt
  307. TIMemoryStream
  308. TFieldDef::TFieldDef
  309.  
  310. Tyto zm╪ny mohou zpàsobit, ºe projekt vytvo²en∞ v p²edchozí verzi nepàjde p²eloºit. Nezbude tedy nic jiného, neº vyhledat chyby a doplnit nové parametry.
  311.  
  312. Vlastnost Fields
  313. Poslední zm╪na, která màºe zpàsobit problémy, se t∞ká p²ístupu k jednotliv∞m polím datové mnoºiny pomocí vlastnosti Fields. V p²edchozí verzi m╪la t²ída TDataSet (a tedy i t²ídy od ní odvozené, nap². TTable, TQuery a dalτí) vlastnost Fields, která p²edstavovala pole databázov∞ch sloupcà. V souƒasné verzi je vlastnost Fields objekt typu TFie- lds, kter∞ má mimo jiné vlastnost Fields p²edstavující pole databázov∞ch sloupcà.
  314. To znamená, ºe nap². p²íkaz
  315.  
  316. String jmeno = Dotaz->Fields[0]->FieldName;
  317.  
  318. kter∞ fungoval v C++ Builderu 3, musíme zm╪nit na 
  319.  
  320. String jmeno = Dotaz ->Fields->Fields[0]->FieldName;
  321.  
  322. Visual C++ 5.0 a 6.0:
  323. Virtuáln╪ d╪d╪n∞ operátor p²etypování
  324. V p²ekladaƒích Microsoft Visual C++ 5.0 a 6.0 se setkáme s následující chybou. P²edstavte si, ºe ve t²íd╪ A definujeme jako metodu operátor p²etypování nap². na typ int, tedy metodu A::operator int(). Jestliºe tuto t²ídu pouºijeme jako spoleƒného p²edka a odvodíme dva virtuální potomky, nap². t²ídy B a C, a od nich pak spoleƒného potomka, t²ídu D, pak p²ekladaƒ nedokáºe zd╪d╪n∞ operátor p²etypování pouºít pro instanci t²ídy D. Pokud vám to p²ipadá komplikované, podívejte se na p²íklad:
  325.  
  326. class A // Spoleƒn∞ p²edek
  327. {
  328. public:
  329. operator int(){ return 1; }
  330. int f() {return 1;}
  331. };
  332. // Virtuální potomci B a C
  333. class B: public virtual A
  334. {};
  335. class C: public virtual A
  336. {};
  337. // Spoleƒn∞ potomek
  338. class D: public B, public C
  339. {};
  340. int main()
  341. {
  342. D d, e, f;
  343. int i = e;    // Zde p²ekladaƒ 
  344. // ohlásí chybu
  345. return 0;
  346. }
  347.  
  348. P²i p²ekladu p²íkazu
  349. int i = e;
  350. ve funkci main() bude p²ekladaƒ hledat zpàsob, jak p²evést instanci typu D na hodnotu typu int. Takovou cestu p²edstavuje práv╪ funkce A::operator int() zd╪d╪ná po t²íd╪ A. T²ída D ji sice zd╪dí dv╪ma cestami, ale pouze jednou, nebo£ A je virtuální p²edek t²íd B a C, takºe instance t²ídy D obsahuje jedin∞ podobjekt t²ídy A. To znamená, ºe hláτení p²ekladaƒe o nejednoznaƒnosti p²etypovacího operátoru je chybné. Ostatn╪ pro jiné funkce tento problém nenastane - o tom se snadno p²esv╪dƒíme, jestliºe do funkce main() p²idáme p²íkaz
  351. i = e.f();
  352. Pokud se vám zdá, ºe jde o nepravd╪podobnou a nepouºívanou konstrukci, pak se podívejte na následující p²íklad, kter∞ najdete ve v╪tτin╪ b╪ºn∞ch uƒebnic C++:
  353.  
  354. #include <fstream>
  355. using namespace std;
  356. void main()
  357. {
  358. fstream F("data.dta", ios::in);
  359. if(F)    // Zde op╪t ohlásí 
  360. // p²ekladaƒ chybu
  361. {/* ...pouºijeme F ... */
  362. }
  363. }
  364.  
  365. V podmínce p²íkazu if jsme zapsali identifikátor datového proudu. To by m╪lo b∞t v po²ádku, nebo£ t²ída fstream obsahuje operátor p²etypování na void*, kter∞ vrací 0, pokud se nepoda²í poslední operace s proudem - zde nap². otev²ení souboru. Jde tedy o jednoduch∞ nástroj pro test stavu proudu. Tento operátor je definován ve t²íd╪ ios, odkud jej zd╪dí dva virtuální potomci, t²ídy istream a ostream. T²ída fstream je pak jejich spoleƒn∞m potomkem. I zde ovτem p²ekladaƒ Visual C++ 5.0 a 6.0 ohlásí, ºe nedokáºe jednoznaƒn╪ urƒit, kter∞ operátor pouºít, i kdyº má jen jeden.
  366. Poznamenejme, ºe tento problém se neobjevuje ve vτech situacích. Nap²íklad jin∞ b╪ºn∞ programátorsk∞ obrat, pouºívan∞ pro ƒtení ze souboru, 
  367.  
  368. fstream F("data.dta", ios::in);
  369. int i; 
  370. while(F >> i)
  371. Zpracuj(i);
  372.  
  373. se p²eloºí bez problémà, i kdyº vlastn╪ znamená totéº. V∞sledkem (hodnotou) operace F >> i je proud F po ukonƒení ƒtení, a ten se zde implicitn╪ konvertuje na pomocí funkce operator void*() na hodnotu, která ukazuje, zda se ƒtení poda²ilo.
  374. Miroslav Virius
  375.  
  376.