Toon posts:

[VB6] bijzonder control nodig / zelf maken

Pagina: 1
Acties:

Verwijderd

Topicstarter
.

[ Voor 99% gewijzigd door Verwijderd op 31-10-2023 22:42 ]


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 19:05
Verwijderd schreef op 21 september 2004 @ 17:01:
Als ik het zelf ga opbouwen uit losse regels van losse controls dan zit ik met het feit dat het aantal regels groter kan zijn dan er in 1 keer weergegeven kunnen worden. Ik moet dan zelf vertical scrollbars toevoegen die mijn eigen controls omlaag scrollen. Dit vind ik wel heel erg tricky en gaat ook best veel werk worden. Kan me goed voorstellen dat hier wel iets simpelers voor is misschien?
Heb ooit een equivalente maar wel veel simpeler situatie gehad. Als losse controls werken kan je proberen ze in een frame te stoppen en je scrolls op het frame los te laten. Weet niet of hier limieten aan zitten qua max aantal controls in frame etc, maar als scrollen je enige probleem is't het proberen waard lijkt me.

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 19:25

Delphi32

Heading for the gates of Eden

onkl schreef op 21 september 2004 @ 20:48:
Heb ooit een equivalente maar wel veel simpeler situatie gehad. Als losse controls werken kan je proberen ze in een frame te stoppen en je scrolls op het frame los te laten. Weet niet of hier limieten aan zitten qua max aantal controls in frame etc, maar als scrollen je enige probleem is't het proberen waard lijkt me.
Het is al even geleden dat ik met VB gewerkt heb, maar van VB5 kan ik me herinneren dat er een limiet op zat van max 1024 controls per form. Wel zinnig om even te checken dus :) Met 8 checkboxen/radiobuttons per regel gaat het vrij rap naar die limiet toe.

Verwijderd

Topicstarter
.

[ Voor 98% gewijzigd door Verwijderd op 31-10-2023 22:42 ]


Verwijderd

Het kan ook met een voorgebakken datagrid, als deze tenminste custom draw methodes ondersteunt. Wat je dan custom moet doen is weergave van het bitpatroon. Invoer kan je doen door bv een textvak boven de grid te laten zweven.

Verwijderd

Topicstarter
.

[ Voor 206% gewijzigd door Verwijderd op 31-10-2023 22:42 ]


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 19:05
Verwijderd schreef op 22 september 2004 @ 10:29:
Maximaal zijn er 200 regels. Per regel krijg ik dan: 1x [radiobutton], 1x[textbox], 1x[iets grafisch].

valt dus binnen 1000.

Maar hoe zou dat scrollen dan moeten?
Is idd even prutsen. Basis is: een frame heeft-als ieder control een set maten (Top, Left, Height etc.) De top en left properties van alle controls binnen het frame -al jou controls- zijn dan t.o.v. de linkerbovenhoek van het frame.
Dus, als je 1 (V) scrollbalk hebt, hoeft je alleen de top propery van je frame te veranderen en de rest gaat wel mee.
Controls runtime toevoegen gaat heel makkelijk weet ik me te herinneren. weet allen niet meer hoe :) (lang geleden) Het had iig. iets van doen met control array's.
Correct me if wrong: Zorg dat je originele controls arrays zijn. dan kan je vrij rucksichtlos een control(waarde die nog niet bestaat) aanroepen en het ding bestaat.
Check google even in deze hoek, is veel te vinden.

[ Voor 24% gewijzigd door onkl op 22-09-2004 11:25 ]


Verwijderd

Topicstarter
.

[ Voor 98% gewijzigd door Verwijderd op 31-10-2023 22:42 ]


Verwijderd

Topicstarter
.

[ Voor 98% gewijzigd door Verwijderd op 31-10-2023 22:42 ]


Verwijderd

Topicstarter
.

[ Voor 97% gewijzigd door Verwijderd op 31-10-2023 22:43 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op 22 september 2004 @ 16:11:
Ehm, maar in een control heb je geem form1..... damn, hoe maak ik er nu dan een eigen control van?
1Zet de index van je control (MyTextBox bijvoorbeeld) op 0 en dan:

Load MyTextBox(1) om een 2e toe te voegen en Load MyTextBox(2) om er weer 1 toe te voegen.

2Verder vraag ik me ernstig af wat er mis is met een listview, die bevat al checkboxes, kan overweg met meerdere kolommen en je kunt er gewoon je 1-en en 0-en in weergeven. Ik zou dat toch eerder gebruiken als m'n eigen control.

3Verder hoef je niet meer controls te laden als zichtbaar zijn. Je kunt namelijk op het moment van scrollen gewoon de waardes omhoog "scrollen"...

Ik schrijf effe wat voorbeeldjes van wat ik bedoel...(scroll naar de onderkant van deze post om een zip te downloaden met de voorbeelden).

(voorbeeld 1):
Nieuw project. Gooi 1 textbox op je form en zet het Index property op 0 (default is leeg)
code:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Form_Load()
    Dim T As Long
    
    For T = 0 To 10
        If T > 0 Then Load Text1(T)
        Text1(T).Left = 100
        Text1(T).Top = T * 500
        Text1(T).Text = "Blabla" & T
        Text1(T).Visible = True
    Next
End Sub

En runnen :Y)

(voorbeeld 2):
Nieuw project. Gooi een listview op je form (Project->Components (Of Ctrl-T) en daar Microsoft Windows Common Controls aanvinken) en run deze code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Form_Load()
    Dim T As Long
    Dim li As ListItem
    
    ListView1.View = lvwReport
    ListView1.Checkboxes = True
    ListView1.ColumnHeaders.Add , , "Kolom 1"
    ListView1.ColumnHeaders.Add , , "Kolom 2"
    
    For T = 0 To 50
        Set li = ListView1.ListItems.Add(, , "Blabla" & T)
        li.SubItems(1) = CBin(T)
        li.Checked = (Rnd < 0.5)
    Next
End Sub

Public Function CBin(ByVal Nr As Long, Optional Precision As Integer = 8) As String
  Do Until Nr = 0
    CBin = CStr((Nr Mod 2)) + CBin
    Nr = Nr \ 2
  Loop
  CBin = Format(Val(CBin), String(Precision, "0"))
End Function


(voorbeeld 3):
Nieuw project. Gooi een textbox op je form en de index weer op 0. Vervolgens gooi je ook nog een Vertical Scrollbar op je form. Niet meer en niet minder...
code:
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
Private arrValues(250) As String
Private Const cTextBoxCount = 10

Private Sub Form_Load()
    Dim T As Long
    
    'Textboxes maken
    For T = 0 To cTextBoxCount
        If T > 0 Then Load Text1(T)
        Text1(T).Left = 100
        Text1(T).Top = T * 450
        Text1(T).Visible = True
    Next
    
    'Scrollbar instellen
    VScroll1.Min = 0
    VScroll1.Max = UBound(arrValues) - cTextBoxCount

    'Array met testwaardes vullen
    For T = 0 To UBound(arrValues)
        arrValues(T) = "Blabla" & T
    Next

    DisplayValues VScroll1.Value
End Sub

Private Sub DisplayValues(lOffset As Long)
    Dim T As Long
    
    For T = 0 To cTextBoxCount
        Text1(T).Text = arrValues(T + lOffset)
    Next
End Sub

Private Sub VScroll1_Change()
    DisplayValues VScroll1.Value
End Sub

Private Sub VScroll1_Scroll()
    DisplayValues VScroll1.Value
End Sub

En weer runnen :)
Deze methode scheelt je 240 controls!!! (of 480 als je een textbox EN een checkbox zou gebruiken, en ...)


...als je hier niet mee geholpen bent weer ik het ook niet meer :Y)

Ik heb de voorbeelden effe ge-zipt en online geplempt: hier te downen.

En tot slot wil ik je even wijzen op de edit (Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif)knop, zodat je niet 3 keer je topic omhoog schopt, maar gewoon netjes je laatste post edit (en dus niet 3x achter elkaar replied in je eigen topic) ;)

Update:
Ik heb aan de zipfile nog een 4e voorbeeld toegevoegd waarin je kunt zien hoe dit met een textbox EN een checkbox zou gaan. Je ziet dus goed dat dit een enorme bult controls (lees: geheugen!) scheelt als je het op deze manier doet (in mijn geval scheelt het 480 controls dus, op een totaal van wat anders 500 zou zijn geweest! Er worden nu dus maar 20 controls geladen)...Correctie: 22 :X

[ Voor 150% gewijzigd door RobIII op 22-09-2004 18:23 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • onkl
  • Registratie: Oktober 2002
  • Laatst online: 19:05
_/-\o_ @ Rob III. Voorzover ik zie is zijn methode beduidend galanter & sneller dan mijn ideetje. TS, als ik jouw was zou ik dit verder gebruiken.
Pagina: 1