VB – 48. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

VB – 48. lekceVB – 48. lekce

 

VB – 48. lekce

Google       Google       4. 10. 2006       15 324×

48.1 MDI obecně
48.2 Proč v MDI objekty a jak nám pomůžou
48.3 Práce s MDI
48.4 Domácí úkol
48.5 V další lekcí

Reklama
Reklama

48.1 MDI

Co je to MDI?

MDI a SDI (to nás nebude zajímat) jsou, zkusím to říci zjednodušeně, typy programů podle toho, jak se v nich pracuje s dokumenty. SDI (Single Dokument Interface) nám umožňuje mít v jednom otevřeném programu otevřený jediný dokument. Jako příklad lze uvést třeba poznámkový blok. Zatímco v MDI (Multi Dokument Interface) může být otevřena spousta dokumentů. Jako příklad lze uvést programy jako PaintShop a Photoshop, kde můžete mít otevřeno spoustu obrázků.

A co nám vůbec MDI přináší?

No začínajícím programátorům možná bolavou hlavu, ale jinak jen samé výhody. V jednom jediném spuštěném programu můžeme mít otevřenu spoustu dokumentů. Je to přehledné, příjemnější na práci, pokud třeba pracujte mezi dvěma dokumenty. A je toho víc, na to přijdete časem.

Co je ještě třeba vědět o MDI?

Je zde několik záludných věcí, na které je třeba dávat pozor, a to:
› V celém projektu může být jen jediný MDI formulář, víc nejspíš stejně nebudete potřebovat.
› Formuláře jsou potom dceřiné a běžné formy, formuláře dceřiné jsou podřazeny formuláři MDI, ostatní jsou mu „rovny“.
› Menu formuláře MDI je velice propracované a toho bude využívat, funguje totiž tak, že pokud dceřiný formulář nemá menu, je zobrazeno MDI formu, pokud ale menu má, je zobrazeno jeho menu. To je naprosto skvělá i, když nahraditelná, vlastnost, ale proč si komplikovat život, když ji máme po ruce.
› Pokud chcete na samotný MDI form vložit nějaké objekty, používá se jako kontejner picture box.
› Na MDI form nejde vkládat běžné objekty, musíte využít picture boxu, na který je vložíte. Vložit lze Timer a jiné, v run módu neviditelné, objekty a objekt data.
› O zbytku si povíme během následujících lekcí.

Jak na MDI program?

Vytvoříme nový projekt, protože soudruhy od M$ „nenapadalo“, že lidi budou MDI projekty tvořit, tak musíme vytvořit standardní EXE a potom formulář MDI přidat. Otevřeme si okno Project properties a zvolíme si, že si přejeme, aby se spustil prvně MDI formulář a aby nebyl prázdný, tak Form1, který nám tam zůstal, lehce upravíme, a to tak, že jeho vlastnost MDIChild nastavíme na True. Tím pádem máme vytvořený dceřiný formulář. Teď formulář upravíme podle našeho gusta; pokud tedy budeme otevírat textové dokumenty, vložíme text box, pokud grafiku, tak třeba picture box. A nyní už to bude právě o objektech.


48.2 Proč v MDI objekty a jak nám pomůžou

Nyní tedy k objektům, jak je využít? Pokud bychom dělali v MDI a někdo chtěl mít otevřených 10, 20, 50 nebo i více dokumentů, bylo by dělání každého zvlášť tak trochu otrocká práce. My si tedy uděláme jen jeden jediný. Ten ovšem jako takový nepoužijeme, ale využijeme ho jako třídu, šablonu, podle které je budeme vytvářet jako nové objekty. Kód je veskrze prostý.

Dim objDoc As Object
Private Sub mnuNovy_Click()
    Set objDoc = New Form1
    objDoc.Show
End Sub

Kód potom může být různě upraven pro vaše účely; může mít navíc funkce, jako je čítání dokumentů, takže nebudte mít otevřeny jen samé Nový Dokument, ale Nový Dokument 1, Nový Dokument 2, Nový Dokument 3, atd. Viz kód.

Private Sub mnuNovy_Click()
    Static count As Long
    count = count + 1
    Set objDoc = New Form1
    objDoc.Caption = "Nový Dokument" & count
    objDoc.Show
End Sub

Každý formulář dostane vlastní handle. Stane se z něj tedy plnohodnotný formulář se vším všudy. Začali jsme s objekty tedy trošičku jinak, a to z toho důvodu, že nám onu šablonu netvořila třída , ale formulář. Ke třídě se dostaneme v další lekci.


48.3 Práce s MDI

Otevření dokumentu, jak mi jistě všichni (doufám že všichni) dáte za pravdu, není dostatečné pro plnohodnotnou práci s dokumentem. Je potřeba nějaké ukládání a podobné procedury; ukládání a podobné bych nechal na vás, ale jak to vyřešit ohledně volání na některé základní funkce, se podíváme hned teď. Ostatní postupem času zvládneme také.

Ukládání dokumentu a reakce na pokus o jeho zavření

Ve vetšině programů, když editujete nějaký soubor a pokusíte se ho zavřít, na vás vyskočí s výzvou, zda chcete uložit změny nebo zda si přejete dokument uložit. My tohle teď našemu dokumentu přidáme také. Podíváme se tedy postupně na funkce Uložit, Uložit jako a právě na onu výzvu k uložení.

Co se týká ukládání, skládá se jen z několika a dotazů a je volán z menu formuláře, viz kód:

Private Sub mnuSave_Click()
 On Error GoTo konec

    If Me.txtMain.Text = "" Then 'dotaz na uložení prázdného dokumentu
        ret = MsgBox("Soubor" & Form.Caption & "je prázdný opravdu si přejete jej uložit?", vbYesNo, "Dotaz:")
        If ret = 7 Then Exit Sub
    End If
        
    If Left(Me.Caption, 7) = "Soubor:" Then 'ukládání dokumentum, který je upraven, již dříve existoval
        Lenght = Len(Me.Caption)
        Path = Right(Me.Caption, Lenght - 8)
        Open Path For Output As #1
        Print #1, Me.txtMain.Text
        Close #1
        
    Else: 'upravení dokumnetu který je nový
        With MainForm.CommonDialog1
            .Filter = "Textové soubory *.txt|*.txt"
            .CancelError = True
            .ShowSave
            Open .FileName For Output As #1
            Print #1, Me.txtMain.Text
            Close #1
            Me.Caption = "Soubor: " & .FileName
        End With
    End If
    Exit Sub
konec:
    MsgBox "Chyba při ukládání souboru. Soubor nelze uložit", vbCritical, "Chyba:"
End Sub

Funkce Uložit jako je trochu jednodušší, nemusí se totiž kontrolovat, zda dokument již existuje, viz kód:

Private Sub mnuSaveAs_Click()
    On Error GoTo konec
    
    If Me.txtMain.Text = "" Then 'dotaz na uložení prázdného dokumentu
        ret = MsgBox("Soubor " & Me.Caption & " je prázdný, opravdu si jej přejete uložit?", vbYesNo, "Dotaz:")
        If ret = 7 Then Exit Sub
    End If
    
    With MainForm.CommonDialog1 'ukládání
        .Filter = "Textové soubory *.txt|*.txt; Vše *.*|*.*"
        .CancelError = True
        .ShowSave
        Me.Caption = "Soubor: " & .FileName
        Open .FileName For Output As #1
        Print #1, Me.txtMain.Text
        Close #1
    End With
    Exit Sub
    
konec: 'ošetření chyb
    If Err.Number = 32755 Then
        Exit Sub
    Else:
        MsgBox "Nastala chyba při ukládání", vbCritical, "Chyba:"
    End If
End Sub

Na závěr bych se tedy zmínil k zavírání formuláře a k rekci na tuto událost. Všechnoby, si myslím, mělo vyplynout z kódu, který je mezi námi jen lehce okomentován stylem, který mi vyhovuje, tj. komentování bloků kódu a ne každého příkazu.

Private Sub Form_Unload(Cancel As Integer)
    Dim Lenght As Long
    On Error GoTo konec
    'výběr mezi tím zda uložit nebo neuložit či storno
    ret = MsgBox("Chcete uložit změny v souboru: " & Me.Caption & "?", vbYesNoCancel, "Ukládání: ")
    If ret = 2 Then Cancel = True
    If ret = 7 Then Cancel = False
    If ret = 6 Then
    
        If Me.txtMain.Text = "" Then 'dotaz na uložení prázdného dokumentu
            ret = MsgBox("Soubor: " & Me.Caption & " je prázdný, opravdu si jej přejete uložit?", vbYesNo, "Dotaz:")
            If ret = 7 Then Exit Sub
        End If
        
        If Left(Me.Caption, 7) = "Soubor:" Then 'ukládání dokumentu, který je upraven, již dříve existoval
            Lenght = Len(Me.Caption)
            Path = Right(Me.Caption, Lenght - 8)
            Open Path For Output As #1
            Print #1, Me.txtMain.Text
            Close #1
            Cancel = False
            
        Else: 'uložení dokumnetu který je nový
            With MainForm.CommonDialog1
                Cancel = True
                .Filter = "Textové soubory *.txt|*.txt"
                .CancelError = True
                .ShowSave
                Open .FileName For Output As #1
                Print #1, Me.txtMain.Text
                Close #1
                Cancel = False
            End With
        End If
    End If
    Exit Sub
    
konec: 'ošetření chyb
    If Err.Number = 32755 Then
        Exit Sub
    Else:
        MsgBox "Nastala chyba při ukládání", vbCritical, "Chyba:"
    End If
End Sub

Tato událost nastane, i když se zavírá hlavní MDI formulář.


48.4 Domácí úkol

Za domácí úkol je vytvořit si jakýkoliv program, který pracuje v režimu MDI.

Za druhé – zjistit, co je chyba 32755 a proč zpracovávám právě takto.


    If Err.Number = 32755 Then
        Exit Sub
    Else:
        MsgBox "Nastala chyba při ukládání", vbCritical, "Chyba:"
    End If

48.5 V další lekcí

Budeme pokračovat v objektech, které nám pomáhají v MDI, a podíváme se na vyřešení problému s funkcí zpět a vpřed. Ale třeba i na otevření existujícího dokumentu.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

1 názor  —  1 nový  
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jiří ChytilAutor programuje ve VB, zajímá se o elektrotechniku, studuje na SOŠ Elektrotechnické - obor číslicová technika.
Web    

Nové články

Obrázek ke článku Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý