Otázky a odpovědi
V této rubrice najdete odpovědi na své otázky, které
můžete zasílat na adresu vbtipy@seznam.cz.
pokud nebudeme znát odpověď na nějakou otázku, objeví se v části Otázky bez odpovědi
a budete-li znát odpověď vy, můžete nám ji pomocí výše uvedené adresy zaslat, rádi
ji zveřejníme.
 |
Jak lze u ovládacích prvků DataGrid a DbGrid přidávat a odebírat sloupce?
|
 |
U prvku DataGrid je to jednodušší, stačí zavolat metodu Add kolekce
Columns .
dbg1.Columns.Add 1
dbg1.Columns.Add 2
U prvku DBGrid přidáte sloupec podobným způsobem, jen je ještě třeba nastavit jeho
viditelnost.
DBGrid1.Columns.Add 2
DBGrid1.Columns(2).Visible = True
|
 |
Zajímalo by mě, jestli lze ve VB nějak nastavit verze mého programu,
která se uživateli objeví ve vlastnostech na kartě verze?
|
 |
V menu Project->Properties, záložka Make, položky Major, Minor a Revision.
V programu tyto informace můžete získta přes vlastnosti objektu App ,
App.Major , App.Minor a App.Revision .
|
 |
Lze nějak v RichTextBoxu nastavit horní a dolní index pro ty znaky,
které si uživatel vybere?
|
 |
Horní a dolní index lze vytvořit pomocí vlastnosti SelCharOffset .
Ta určuje vzdálenost písma od základní čáry (v twipech). Kladná hodnota písmo posouvá
nahoru, záporná dolů. Tzn. že chcete-li horní index, nastavte např. hodnotu
200, pro dolní index např. -200 (také je dobré zmenšit velikost písma).
Zkuste např. tento kód:
With rtf1
.SelFontSize = 20
.SelText = "2*E"
.SelFontSize = 8
.SelCharOffset = 200
.SelText = 10
End With
|
 |
Napsal jsem si textový editor ve VB 6 a až poté zjistil,
že nemohu do tohoto editoru načíst větší soubor než cca 64KB.
Je možné, aby můj editor načítal i větší soubory, např. 1MB?
|
 |
Maximální velikost textu v jednořádkovém TextBoxu je 2048B, pro více řádkový
TextBox je to 32KB. Pokud chcete pracovat s delším textem, použijte RichTextBox.
|
 |
Ve své aplikaci spouštím pomocí ADO a objektu Connection
dotaz na databázi. Tento dotaz však trvá hodně dlouho a než skončí, celá aplikace
je tzv. "zmrzlá", tj. nereaguje na nic. Je nějak možné spustit dotaz a nečekat na
jeho ukončení?
|
 |
Možné to samozřejmě je a dokonce velmi jednoduše. Stačí nastavit parametr
Options metody Execute na hodnotu adAsyncExecute .
V tomto případě program nečeká na ukončení dotazu a hned pokračuje dále. Chcete-li
vědět jak dotaz dopadnul, nadefinujte proměnnou typu Connection
s klíčovým slovem WithEvents . Takto můžete odchytit
událost ExecuteComplete , která je vyvolána
po ukočení SQL příkazu. Velmi zjednodušeně asi takto:
Private WithEvents cn As ADODB.Connection
Private Sub cn_ExecuteComplete(ByVal RecordsAffected As Long, ByVal pError As ADODB.Error, _
adStatus As ADODB.EventStatusEnum, ByVal pCommand As ADODB.Command, _
ByVal pRecordset As ADODB.Recordset, ByVal pConnection As ADODB.Connection)
MsgBox "Dotaz skoncil"
End Sub
Private Sub Form_Load()
cn.Execute "UPDATE osoby SET plat=5000", , adAsyncExecute
End Sub
|
 |
Vytvářím komponentu typu ActiveX EXE. Ve vlastnostech projektu jsem objevil
několik vlastností, které mi nic neříkají. Zaujali mě však dvě, a to "Thread per object"
a "Thread Pool". Můžete mi poradit, co to znamená a jak je použít?
|
 |
Tato problematika je bohužel poněkud složitá na to, aby se na ni dalo krátce odpovědět.
Zjednodušeně řečeno jde o to, že pokud nastavíte prvně uvedenou vlastnost, bude pro každou
instanci komponenty vytvořen nový STA apartment a nové vlákno (což není zrovna výhodné z hlediska
šetření systémovými prostředy). Druhá možnost nastavuje maximální počet STA apartmentů, tzn.
nastavíte-li třeba 5, šestá instance již nevytvoří nový STA apartment, ale vznikne
již v existujícím. Tak je zajištěno šetření systémovými prostředky, ale zase je pro několik
instancí vytvořeno pouze jedno vlákno, tudíž komponenty v jednom apartmentu nemají možnost
běžet paralelně. Pokud by vás tato problematika zajímala více, velmi doporučuji
knihu Programujeme v COM a COM+ od Dalibora Kačmáře.
|
Otázky bez odpovědi
 |
Jakým způsobem mohu uložit do resource souboru MP3 soubor a jak ho odtud získat?
|
 |
Potřeboval bych pomocí funkce API vyvolat dialog "Najít".
Slyšel jsem, že je to přesně funkce Findtext .
Její deklaraci jsem si našel v programu API Text Viewer
včetně typu FINDREPLACE . |
 |
Neexistuje nějaký OCX, nebo DLL knihovna, která by umožňovala odesílání
krátkých textových zpráv rovnou z PC přes modem? |
 |
Jak lze přijímat/posílat data na některý z portů ve Windows 2000? |
 |
Nevíte kde se dá sehnat (pokud existuje) prvek, který se chová jako textové pole ve Wordu? |
 |
Používám VB6 a chtěl bych z mého programu otevřít soubor PhotoPaintu. Kód vypadá následovně:
Dim xApp as PHOTOPAINT.CPntAutomate
xApp.FileOpen ("nazov suboru")
Bohužel to takto nefunguje. Co ještě musím zadat, aby se soubor otevřel? |
 |
Jak zjistit, kolik bajtů bylo staženo přes Internet v předem dané době? Jde mi o připojení
přes lokální síť, ne přes modem. |
 |
Jak se dá ve Visual basicu ovládat USB port? |
 |
Ve Windows 98 jsem vytvořil program s ovládacím prvkem Timer. Program fungoval bez problémů, ale když jsem jej
spustil na Windows 2000, prvek časoval asi 5x rychleji. Nevíte so s tím? |
 |
Potřebuji ve svém programu použít průhledný textbox nebo textbox, ve kterém by byl na pozadí mnou vybraný obrázek.
Na Internetu jsem našel tři různé návody, ale ani jeden
neposkytuje takové funkce jako původní textbox (ScrollBar, DataField atd.). |
|