Ce este și la ce folosește un MsgBox (Message Box)
Dacă ați programat în VBA de la Microsoft sau Basic de la LibreOffice sigur ați avut nevoie de MsgBox. Cu ajutorul lui afișați o mică (și simplă) fereastră prin intermediul căreia transmiteți mesaje utilizatorului și, eventual, codul apelant va continua pe anumite direcții, în funcție de butonul apăsat de utilizator.
Sintaxa generală a MsgBox este următoarea:
MsgBox(MessageText[, DialogCode[, Title]])
unde:
- MessageText – obligatoriu, conține textul pentru mesajul pe care doriți să-l afișați
- DialogCode – neobligatoriu, un cod numeric, format din suma a trei coduri unice, acestea fiind funcție de ce butoane dorim să afișăm, ce icoană dorim să apară în stânga mesajului și ce buton vrem să fie cel implicit (adică ce buton se apasă dacă utilizatorul apasă pe tasta Enter). De ce am avea nevoie de un buton implicit? Păi, simplu, dacă avem două butoane Yes și No, iar la Yes urmează să se întâmple ceva ireversibil (sau greu reversibil), degeaba îl întrebăm pe utilizator ”Chiar vrei să ștergi cele 234 de fișiere?” dacă el a adormit pe tasta Enter și nu am ales ca implicit al doilea buton😊Dacă nu completăm nimic, va apare doar butonul OK și nici o icoană.
- Title – neobligatoriu, este textul titlului ferestrei. Dacă nu completăm nimic, titlul va fi ”LibreOffice” urmat de numărul versiunii LibreOffice
Dacă ne intereseză să vedem și ce buton s-a apăsat, folosim ceva de genul:
RetValue = MsgBox(MessageText[, DialogCode[, Title]])
și în variabila RetValue vom avea un număr întreg, bine stabilit, funcție de butonul apăsat. Sau tasta, pentru că dacă utilizatorul a apăsat butonul X pentru închiderea ferestrei sau tasta Esc, vom știi din faptul că RetValue primește valoarea 0 (zero).
De ce avem nevoie de un Designer pentru MsgBox?
Dacă dorim doar să transmitem un mesaj, să avem doar butonul OK și nu ne interesează ce a apăsat utlizatorul, varianta
MsgBox(“Actualizarea datelor s-a terminat”)
este suficientă. Însă dacă vrem ceva mai complex, Designerul din acest articol este ”un must”, cum zic romglezii 😊
- ne construim tot codul în mod vizual, din câteva click-uri
- testăm MsgBox-ul direct în Designer, astfel vom vedea imediat cum arată, fără să părăsim Designer-ul
- după testare obținem direct și RetValue, numeric și explicit
- obținem definiția (linia de cod), dar și codul extins (varianta în care tratez diferențiat în funcție de butonul apăsat
- îmi copiez în Clipboard ce vreau (definiția sau întreg codul extins) și dau Paste în codul meu
Cum folosesc Designer-ului MsgBox?
Titlu fereastra – aici completez textul care vreau să apară ca titlu al ferestrei
Mesaj – aici completez textul care vreau să apară ca mesaj
Butoane – aleg combinația de butoane dorită. În paranteză am trecut codul care se însumează pentru DialogCode
Icoane – aleg ce icoană vreau să folosesc în ferestră. În paranteză am trecut codul care se însumează pentru DialogCode
Buton implicit – aleg al câtelea buton îl vreau ca implicit. În paranteză am trecut codul care se însumează pentru DialogCode. Aici trebuie să țineți cont de ce am scris în dreapta pe fundal roșu.
Pe măsură ce aleg butoane, icoane sau butoane implicite, la Total se actualizează suma pentru DialogCode.
Actualizeaza codul – la apăsarea acestui buton se vor actualiza Definitia și Codul extins.
Indentare – cu câte caractere Spațiu doresc să se facă indentarea codului extins (rândurile cu Case…)
Testează – la apăsarea butonului va apare un Message Box generat pe baza a ceea ca am ales. Nu e nevoie să actualizez codul în prealabil. După ce închid acest Message Box, la Rezultat va apare valoarea RetValue și explicit butonul apăsat de utilizator.
Cancel – închid Designer-ul. Se poate și cu tasta Esc.
Cum instalez și accesez Designer-ul pentru MsgBox în LibreOffice?
- Descărcați fișierul acesta. Dezarhivați folderul Utilitare din el.
- Rulați LibreOffice. Nu e nevoie să deschideți un fișier anume
- Mergeți la meniul Tools – Macros – Organize Dialogs…
- Alegeți tab-ul Libraries și la Location alegeti din listă My Macros and Dialogs
- Dați pe butonul Import… și mergeți în folderul dezarhivat Utilitare. Alegeți orice fișier cu extensia .xlb din folder și Open. În următoarea fereastră alegeți OK și apoi Close. Biblioteca cu dialogul și codul necesar sunt instalate.
- Pentru a accesa rapid, vom adăuga un buton la toolbar-ul din interfața de editare Basic.
- Mergem la meniul Tools – Macros – Edit Macros… Așa am deschis editorul Basic.
- Mergem la meniul Tool – Customize…
- Sus alegem tab-ul Toolbars. În lista Category alegem Macros (aici durează un pic până se încarcă lista de la Available Commands). În lista Available Commands alegem My Macros – Utilitare – GenerareMsgBox – MsgBoxDialog.
- La Scope trebuie să avem selectat LibreOffice Basic și la Target să fie Standard.
- Apăsăm pe butonul cu săgeata groasă orientată spre dreapta. Acum am creat butonul pentru lansarea designer-ului. Butonul va fi fără icoană și cu textul MsgBoxDialog.
- Dacă vrem ceva mai profi, dăm click pe butonul Modify, apoi Rename… și modificăm în Designer MsgBox.
- Dacă vrem și mai profi, alegem și o icoană pentru buton. Din nou Modify, apoi Change Icon… Eu am ales icoana de pe rândul 42, coloana a 8-a.
Acum, de fiecare dată când aveți nevoie de Designer, apăsați pe buton și aveți cu ce să vă jucați.
Las mai jos și codul, pentru referință.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | REM ***** BASIC ***** 'icoana toolbar: coloana 8, randurile 42 sau 43 Option Explicit Dim oDialog As Object Sub MsgBoxDialog() oDialog = CreateUnoDialog(DialogLibraries.Utilitare.dlgMsgBox) oDialog.Execute oDialog.Dispose End Sub ' --- Recalculeaza suma --- Sub RecalcSuma(oEvent As Object) Dim oCtrl As Object, i As Integer Dim total As Integer total = 0 ' Parcurgem toate controalele din dialog For Each oCtrl in oDialog.Controls If oCtrl.supportsService("com.sun.star.awt.UnoControlRadioButton") Then If oCtrl.State then total = total + CInt(oCtrl.Model.Tag) End If End If Next oCtrl oDialog.getControl("lblDialogCode").Text = total End Sub Sub ActualizeazaCodul Dim sTitlu As String, sMesaj As String, SDialogCode As String Dim sDefinitie as String, sCod as String Dim sEnter as String, sTab as String sTitlu = oDialog.getControl("txtTitlu").Text sMesaj = oDialog.getControl("txtMesaj").Text sDialogCode = oDialog.getControl("lblDialogCode").Text sEnter = Chr(13) & Chr(10) sTab = Space(oDialog.getControl("nrTab").Value) sDefinitie = "MsgBox(""" & _ sMesaj & """, " & _ sDialogCode & ", """ & _ sTitlu & """)" oDialog.getControl("txtDefinitie").Text = sDefinitie sCod = "RetValue = " & sDefinitie & sEnter sCod = sCod & "Select Case RetValue" & sEnter If oDialog.getControl("optOk").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 1 'OK" & sEnter End If If oDialog.getControl("optOkCancel").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 1 'OK" & sEnter sCod = sCod & sTab & "Case 2 'Cancel" & sEnter End If If oDialog.getControl("optRetryIgnoreAbort").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 4 'Retry" & sEnter sCod = sCod & sTab & "Case 5 'Ignore" & sEnter sCod = sCod & sTab & "Case 3 'Abort" & sEnter End If If oDialog.getControl("optYesNoCancel").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 6 'Yes" & sEnter sCod = sCod & sTab & "Case 7 'No" & sEnter sCod = sCod & sTab & "Case 2 'Cancel" & sEnter End If If oDialog.getControl("optYesNo").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 6 'Yes" & sEnter sCod = sCod & sTab & "Case 7 'No" & sEnter End If If oDialog.getControl("optRetryCancel").State Then sCod = sCod & sTab & "Case 0 'X sau Esc" & sEnter sCod = sCod & sTab & "Case 4 'Retry" & sEnter sCod = sCod & sTab & "Case 2 'Cancel" & sEnter End If sCod = sCod & "End Select" & sEnter oDialog.getControl("txtCod").Text = sCod End Sub Sub Testeaza Dim sTitlu As String, sMesaj As String, SDialogCode As String sTitlu = oDialog.getControl("txtTitlu").Text sMesaj = oDialog.getControl("txtMesaj").Text sDialogCode = oDialog.getControl("lblDialogCode").Text oDialog.getControl("lblReturnCode").Text = MsgBox(sMesaj, CInt(sDialogCode), sTitlu) Select Case oDialog.getControl("lblReturnCode").Text Case "0" oDialog.getControl("lblApasat").Text = "S-a apasat butonul X sau tasta Esc" Case "1" oDialog.getControl("lblApasat").Text = "S-a apasat butonul OK" Case "2" oDialog.getControl("lblApasat").Text = "S-a apasat butonul Cancel" Case "3" oDialog.getControl("lblApasat").Text = "S-a apasat butonul Abort" Case "4" oDialog.getControl("lblApasat").Text = "S-a apasat butonul Retry" Case "5" oDialog.getControl("lblApasat").Text = "S-a apasat butonul Ignore" Case "6" oDialog.getControl("lblApasat").Text = "S-a apasat butonul Yes" Case "7" oDialog.getControl("lblApasat").Text = "S-a apasat butonul No" End Select End Sub |
Poate te interesează și:
Până data viitoare,
Happy Coding!
Surse: imagine articol generată cu ChatGPT