Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
MsgBox in Timer,VB6
Last Updated: Jul 01 2016 07:36, Started by
paull
, Mar 08 2016 21:13
·
0
#1
Posted 08 March 2016 - 21:13
Va salut,
Am scris un programel care urmareste valorile din 3 textboxuri,verifica,daca sunt diferite fata de valoarea de la initializare(0),daca da, atunci se genereaza un event. Eventul generat va apela un script care genereaza un sunet folosind buzzerul calculatorului,si afiseaza un mesaj personalizat pentru fiecare textbox. Valorile care sunt afisate in textboxuri sunt primite via OCX de la un PLC.Problema la care m-am intepenit este ca atita timp cit orice textbox are valoarea necesara pentru event atunci se emite sunet in permamenta si mesajele umplu ecranul. E logic,doar am pus rutina intr-un timer...dar eu vreau sa se afiseze o singura data mesajul specific acelui textbox si sa se emita doar odata sunetul. Desigur ca am incercat sa folosesc 3 timere pentru fiecare textbox,dar totusi,voi avea 200 de textboxuri,asta insemnind 800 de timere,deci va consuma ceva resurse aplicatia,nu mai spun la cum va arata codul si cit va dura sa-l setez. Daca aveti vreo idee care sa ma ajute,va rog postati. Multumesc. Codul arata asa: Public Sub TimerGeneral_Timer() If (Text0.Text > 55) Then Text0.BackColor = &HFFFF& 'galben Shell ("c:/byp.bat") MsgBox ("Eveniment nou, TempCPU!!!") Else If (Text1.Text > 0) Then Shell ("c:/byp.bat") MsgBox ("Eveniment nou, CycleFault!!!") Frame1.BackColor = &HFF& 'rosu Text1.BackColor = &HFFFF& 'galben Label1.BackColor = &HFF& 'rosu Else If Text2.Text = 1 Then Frame1.BackColor = &HFF& 'rosu Label1.BackColor = &HFF& 'rosu Text2.BackColor = &HFFFF& 'galben Shell ("c:/byp.bat") MsgBox ("Eveniment nou,M2H!!!") Else If (Text0.Text = 0) Then Frame1.BackColor = &H80000004 ' gri 'Frame & Boxes in Grey, Communication with PC lost Label1.BackColor = &H80000004 ' gri Text0.BackColor = &H0& 'negru Text1.BackColor = &H0& 'negru Text2.BackColor = &H0& 'negru Text3.BackColor = &H0& 'negru Else Frame1.BackColor = &HC000& 'verde 'Frame & Boxes reset color Label1.BackColor = &HC000& 'verde Text0.BackColor = &H0& 'negru Text1.BackColor = &H0& 'negru Text2.BackColor = &H0& 'negru Text3.BackColor = &H0& 'negru End If End If End If End If Text0.Text = ReadByte(&H4020&, 1000)'adresa de unde vine valoarea in textbox0 Text1.Text = ReadByte(&H4020&, 1001) Text2.Text = ReadByte(&H4020&, 1002) Text3.Text = ReadByte(&H4020&, 1003) DoEvents End Sub |
#3
Posted 08 March 2016 - 21:30
Select Case ca sa nu mai folosesc Ifurile,dar nu rezolva problema.
|
#4
Posted 08 March 2016 - 21:42
-folosesti o variabila globala pe care o initializezi cu 0
-cand apare event-ul intai verifici daca variabila e zero; daca este, pui in ea o valoare ( de exemplu 10) si apelezi scriptul pentru sunet; daca nu e zero, decrementezi variabila (avand grija sa nu-i dai valori negative) fara sa mai generezi sunetul in felul asta sunetul (si mesajul) se vor afisa in cel mai rau caz din x in x secunde, unde x = valoarea (acel 10) * durata timer-ului |
#5
Posted 08 March 2016 - 21:50
De ce ai nevoie de sute de timere si de ce nu folosesti evenimentele generate de OCX (Communications Control)?
|
#6
Posted 08 March 2016 - 22:31
de ce nu subclasezi textbox, si verifici chesti asta doar cand se schimba text-ul?
Quote Problema la care m-am intepenit este ca atita timp cit orice textbox are valoarea necesara pentru event atunci se emite sunet in permamenta si mesajele umplu ecranul. mesajul de alarma apare o singura data sunetul de alarma apare pana cand apesi (schimbi starea) lui ACK Edited by MarianG, 08 March 2016 - 22:36. |
#7
Posted 08 March 2016 - 23:32
Sau poti verifica daca s-a modificat o anumita caseta de text si doar atunci sa generezi semnalul sonor. Poti sa folosesti functii API pentru sunete (PlaySound, Beep, etc).
Private Const SND_ASYNC = &H1 ' play asynchronously Private Const SND_FILENAME = &H20000 ' name is a file name Private Const SND_SYNC = &H0 ' play synchronously (default) Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long Private Sub Text1_Change() PlaySound "C:\WINDOWS\MEDIA\SOUND.WAV", ByVal 0&, SND_FILENAME Or SND_ASYNC End Sub Daca datele vin prea repede poti folosi un timer pentru a intarzia generarea semnalului sonor. Spre exemplu sa nu sune daca nu au trecut cel putin cinci secunde de la ultimul semnal. Se poate face (aproape) orice. Edited by real32, 08 March 2016 - 23:34. |
#8
Posted 09 March 2016 - 10:32
E greu de explicat in cuvinte frumoase cat de gresita e arhitectura prezentata in primul post.
Eu as face asa:
Edited by dani.user, 09 March 2016 - 15:16. |
#9
Posted 09 March 2016 - 20:46
dani.user, on 09 martie 2016 - 10:32, said:
|
#10
Posted 09 March 2016 - 20:57
N-am zis reinventeze nici o roata noua. Componentele gata facute pentru interatiune cu port serial n-are decat sa le foloseasca, doar sa le izoleze de UI. Daca n-are nevoie de valoarea precenta, cu atat mai simplu.
UI-ul trebuie doar sa stie ca a avut loc un eveniment (cu un nume semnificativ si o valoare care am inteles ca o afiseaza pe ecran). |
|
#11
Posted 09 March 2016 - 23:52
Va multumesc pentru indicatii,sunt foarte multe informatii noi pentru mine.Voi incerca sa implementez cele sugerate in functie de timpul liber.
|
#12
Posted 13 March 2016 - 00:59
Va salut,am implementat un array de textbox,e foarte fain de lucrat asa.Am implementat si Select Case pentru 3 textboxuri unde ma intereseaza daca e 0 sau 1 valoarea folosind evenimentul Changed pe textbox.Programul este mult mai aerisit gratie sugestiilor voastre.Imi bat capul cu chestiunea asta:mai am un textbox si vreau sa generez un eveniment daca trece peste o anumita valoare,am incercat cu Case 0, is > 55 dar nu evalueaza conditia,o vede adevarata tot timpul.Dati-mi un exemplu va rog sa vad unde gresesc.
|
#13
Posted 13 March 2016 - 16:06
Am rezolvat
Private Sub Text1_Change(Index as Integer) Select Case Index Case 1 Msgbox("bla bla") ..... Case 8 Msgbox("bla bla") Dim Numbers as integer Numbers=Text1(0) Case Is > 55 Msgbox(" bla bla > 55") Case Is < 55 Msgbox("bla bla < 55") End Select End Sub |
#14
Posted 13 March 2016 - 17:13
Case Select Index ( adica te intereseaza care casuta din array s-a schimbat )
Spune clar ce incerci sa faci cu acel array. |
#15
Posted 13 March 2016 - 18:22
Deci,voi avea 768 de textboxuri,TextBox1(0) la TextBox1(768).Cite 4 Textboxuri intr-un Frame,care si ele vor fi in array(192 bucati).In primul textbox al fiecarui Frame va fi afisata o variabila dintr-un array primit via Ads.Ocx.Variabila poate avea valoare 0 la 70.Daca e mai mare de 0 va schimba culoarea Frameului respectiv in verde altfel in gri,cu conditia ca celelalte 3 textboxuri sa fie 0.Daca primul textbox e mai mare de 55 atunci se afiseaza mesaj si culoarea trxtboxului se schimba in galben,Frame-ul se face rosu.Identic si pt celelalte 3 textboxuri.Daca oricare din ele > 0 atunci se schimba in galben textboxul respectiv,Frame-ul se face rosu,si se genereaza cite un mesaj personalizat tintit catre acel textbox.Avind 192 de Frameu-ri trebuie sa vad care are valori schimbate,chiar si dupa confirmarea mesageboxuri-lor.Cred ca m-am exprimat din topor,dar e destul de simplu,daca fac un Frame cu 4 textboxuri sa mearga ok,restul e doar copy/paste.
|
|
#16
Posted 14 March 2016 - 12:28
Nu inteleg de ce evalueaza de 8 ori clauza text1(0).Afiseaza de 8 ori mesajul de dupa Case is > 55.
|
#18
Posted 15 March 2016 - 07:12
Cite clause in Select Case pot avea fara sa "beneficiez" de scurt-circuit,avind in vedere ca trebuie sa evaluez 768 de textboxuri?Sa grupez cite 50 de textboxuri ?Pina acum am testat doar cu 8 textboxuri.Se poate face o monitorizare a clauzelor?
Am cautat pe net info insa nu se spune cite clauze maxim pot fi,doar atentioneaza ca poate aparea "scurt-circuit" |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users