Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Artiklar / Titel på artikeln

Snabbare ActiveX kontroller med vTableBinding

Postad 2001-01-04 av Patrik Löwendahl i sektionen ASP.NET, C#, Okategoriserat med 0 Kommentarer | Läst av: 6849, Betyg: 0%

Förord

Active X kontroller är av sin natur mycket långsammare än andra COM objekt. Det beror på objektsmodellen som Visual Basic använder för kontrollerna: bild: ActiveX objektsmodell, tagen från Programming Visual Basic 6.0 av: Francesco Balena
Innehåll
  » Hur?
  » Var denna artikeln användbar?
Bilden visar en ActiveX kontrolls 'Extender Object' som lägger sig runt om 'vår' kontroll och därigenom slöar ner den. Extender object ger oss en del properties för vår kontroll som vi kanske inte vill ha eller behöver.

Hur råder vi bot på det här? Jo genom enkel COM baserad teknik, kan vi hoppa över extender objektet och komma in 'bakvägen' till vår kontroll

Principen är enkel, en Active x control kan aldrig bindas med vTableBinding, men det kan däremot en klassmodul. Så till vårt Active X kontroll lägger vi in en klassmodul som i sin tur refererar till kontrollens kärna.



Hur?

Här är ett exempel:

1 Öppna ett nytt Active X kontroll projekt. Kalla kontrollen FastLb
2 Lägg till en klass modul kallad clDirectLine, Instancing skall vara satt till PublicNotCreatable
3 Lägg till en listbox på Active X kontrollen kalla den lbDemo

Nu är förberedelserna klara, dags att plocka in lite kod.
I Active X kontrollen lägg till följande kod:


Dim DirectLine As clDirectLine
Private Sub UserControl_Initialize()
Set DirectLine = New clDirectLine
Set DirectLine.Target = Me
' Skapa nytt clDirectLine objekt och returnera en
' Tala om för objektet vem som skapade det.
End Sub

Property Get dLine() As clDirectLine
Set dLine = DirectLine
' ge en referens till DirectLine objektet
End Property

Public Sub AddListItem(Name As string)
LbDemo.AddItem Name
End Sub

Public Sub ClearBox()
lbDemo.Clear
lbDemo.Refresh
End Sub

Vad gör koden? Koden i sig skapar först ett nytt objekt av vår klassmodul när kontrollen initieras. Klassmodulen kan inte skapas direkt av ett annat Vb projekt, utan måste skapas av Active X kontrollen. Detta föra att vara säkra på att referenser och dyl, är satt ordentligt. Minimerar felrisken från användaren. Den talar också om vem som skapat det, en property vi kommer att använda i klass modulen.

Efter det skapar vi en property som returnerar en referens till objektet vi skapat

Då var det dags att gå över till klass modulen. Koden i den ser ut så här:


Dim TargetControl As FastLb
' Två 'friend properties' som bara kan kallas från
' objekt inom samma projekt som klasmodulen.

Friend Property Get Target() As FastLb
Set Target = TargetControl
End Property

Friend Property Set Target(ByVal axTarget As FastLb)
Set TargetControl = axTarget
End Property

' Vår funktion.
Public Sub AddListItem(Name As String)
' Kalla på AddListItem i kontrollen
Call TargetControl.AddListItem(Name)
End Sub

Då var koden för kontrollen klar. Som synes gör inte klassmodulen speciellt mycket egentligen. Den vidarbefodrar bara vårt anrop på AddListItem till kontrollen. Men genom att göra detta hoppar vi över Extender Object. Och får istället ett objekt att kalla på som bundits med vTableBinding. Vilket är det optimala för ett COM objekt.

Lägg nu till ett projekt till, det är dags att kolla hur mycket snabbare det blev.

1 Skapa ett standard .EXE projekt.
2 Stäng ner alla fönster tillhörande Active X kontrollen
3 Skapa en instans av kontrollen i det nya projektet.
4 Lägg till en textbox (text1) och två knappar (cmdDL ; cmdAx). Lägg också till en label kontroll kallad lblTime.
Exempel:



5. Klipp nu in följande kod till formen:

För att märka störst skillnad bör projektet kompileras och köras. Men även i utvecklingsmiljön syns en


Dim DirectLine As clDirectLine
Private Sub Form_Load()
Set DirectLine = FastLb1.dLine
Text1.Text = 10000
End Sub

Private Sub cmdDL_Click()
Dim tid As Single, i As Integer

FastLb1.ClearBox: DoEvents
tid = Timer

For i = 1 to Cint(Text1.Text)
DirectLine.AddListItem "Item number" & Cstr(i)
Next i
LblTime.Caption = "DirectLine add = " & Format$(Timer - tid, "###.##") & "sek."
End Sub

Private Sub cmdAx_Click()
Dim tid As single, i As Integer
FastLb1.ClearBox: DoEvents
tid = Timer

For i = 1 to Cint(Text1.Text)
Fastlb1.AddListItem "Item number" & Cstr(i)
Next i

LblTime.Caption = "FaslLb add = " & Format$(Timer - tid, "###.##") & "sek."
End Sub

För att märka störst skillnad bör projektet kompileras och köras. Men även i utvecklingsmiljön syns en markant skillnad på de olika typerna.


Var denna artikeln användbar?

Om du gör någon intressant (eller kanske något konstigt fel) på grund av detta material så skicka gärna det med ett mail eller bifoga en länk till mig så presenterar jag detta som ytterligare exempelfiler för kursen. Om detta innehållet är felaktigt eller du lärt dig fler finesser så skriv gärna en rad eller varför inte en egen kurs baserat på dina erfarenheter. Sänd gärna in dina tips till denna artikel.

/Patrik Löwendahl
Upp

0 Kommentarer

Skriv en kommentar på artikeln

Ditt betyg på artikeln



Kommentar:





Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
737
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies