header image

Ročica pojavnega okna v MS Office

Objavil: P.J. | 4.01.2011 | Brez komentarjev |

Tisti, ki so se uspeli spoznati s programskim jezikom Visual Basic presenečeno ugotovijo, da uporabniško ustvarjena okna v Excelu (in drugih programih pisarniške zbirke) nimajo izpostavljene ročice (window handle). V tem prispevku bom opisal, kako si lahko sami pomagamo in jo ugotovimo programsko.

Najprej, če še nismo, ustvarimo nov modul s programsko kodo in ga poimenujemo Win32 API. Semkaj bomo vpisovali deklaracije funkcij, ki nam jih ponuja operacijski sistem MS Windows na uporabo. Sedaj vanj vpišemo deklaracijo za funkcijo FindWindow:

Public Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

S tem smo naredili vse potrebno, kar se tiče sistemskih funkcij. Sedaj v programskem modulu našega okna (obrazca) dodamo nekaj vrstic programske kode:

Public Property Get hWnd() As Long
  Dim aClsName As String
  Static rc As Long

  If rc = 0 Then
    If Val(Application.Version) < 9 Then
      aClsName = "ThunderXFrame"
    Else
      aClsName = "ThunderDFrame"
    End If
    rc = FindWindow(aClsName, Me.Caption)
  End If
  hWnd = rc
End Propert

Na ta način smo ustvarili lastnost našega obrazca hWnd (poimenovanje je izposojeno iz poimenovanja pri ostalih objektih), ki jo lahko prebiramo od vsepovsod, saj smo jo tudi javno izpostavili. Hkrati smo poskrbeli tudi za optimizacijo, saj dejansko sistem zgolj enkrat zaprosimo, naj nam pove ročico našega okna, prebrano vrednost pa shranimo v statično spremenjljivko, saj vemo, da se ročica v času trajanja seje ne bo spreminjala.

Za konec še nekaj o uporabnosti. Včasih se lotimo dolgotrajnejših operacij, npr. branja nekaj desetin, stotin ali celo tisočev vrstic v seznam in nadvse nadležno bi bilo, da bi se vsakič znova izrisovalo okno, ko dodamo posamezen element seznama.

Šifrant knjigovodskih dejavnosti

Šifrant knjigovodskih dejavnosti

Tak primer so npr. drevesni šifranti, kot sta šifrant klasifikacij dejavnosti ali kontni plan. Zato je dobro med izrisovanjem okno “zamrzniti”, torej preprečiti ponovno izrisovanje okna v času dodajanja posameznih elementov v drevesni seznam.

Na ta način ne samo da preprečimo nadležno utripanje na zaslonu, pač pa tudi znatno pospešimo izvajanje naših algoritmov, kar uporabnikom zagotovo naredi delo z našimi orodji prijetnejše.

  • Share/Bookmark
Zapisano pod: Naredi si sam, Programiranje
Tags: , , ,

Pustite komentar

Tvoj odziv :

Komentiranje iz tujine je omogočeno zgolj prijavljenim uporabnikom !

Kategorije