Toon posts:

[vb6] Commondialog-printerbox. Collate/Sort?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Euj iedereen!

Laat ik kort maar krachtig zijn: hoe bekijk ik of de gebruiker in een commondialogbox voor printen het vinkje 'sorteren' ('collate') heeft aangevinkt? Ik kan dat ding wel instellen van te voren door te doen:
code:
1
commondialog.flags = cdlPDCollate


Maar hoe lees ik 'm uit? Gewoon
code:
1
if commondialog.flags = cdlPDCollate then...
werkt niet, omdat er nog meer instellinen in de property flags zitten! Hellup!

Note: de waarde van cdlPDCollate is &H10, misschien iemand daar wat mee weet. Zie ook wel MSDN: http://msdn.microsoft.com.../html/vbproflagsprint.asp

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 23-08 14:17
If commondialog.flags OR &H10 <> 0 Then

Bedenk zelf ook even waarom dit werkt, heb nu niet zo veel tijd... :)

[ Voor 12% gewijzigd door Mart! op 24-12-2002 10:03 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Zo'n flag is een bit patroon. Die &H10 betekend dat de 7e(vanaf de msb, 9e vanaf de lsb) bit hoog moet staan waneer dat geldt. Die eerste toekenning is sowieso niet helemaal goed(tenzij de collate de enige is die aan moet staan.

Om verschillende bit patronen te combineren met je de or operator gebruiken. Om de bits uit te lezen moet je de and operator gebruiken. In dit specifieke geval zul je bij je if statement moeten kijken of die ene bit gezet is in de flags. Dit kun je doen door dit te vergelijken met het gegeven bitje (die &H10). Door deze te AND-en krijg je als antwoord &H10 waneer de bit wel was gezet en 0 waneer ie niet was gezet. Rechtstreeks vergelijken (zoals je nu doet) gaat niet goed omdat dit alleen werkt waneer alleen collate aan stond.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Sorry, ik begrijp het niet en het werkt ook niet. Dit gaat niet goed (vinkje staat altijd aan):
code:
1
2
3
If .Flags And &H10 <> 0 Then
    chk_sort.value = Checked
End If


en dit werkt ook niet (ook hier blijft het vinkje altijd aan):
code:
1
2
3
If .Flags or &H10 <> 0 Then
    chk_sort.value = Checked
End If


Ik heb eens gekeken wat de waarde is van
code:
1
.Flags and &H10
, dat is altijd 0 (of het vinkje op de commondialog nou aan staat of uit) en
code:
1
.Flags or &H10
is altijd 1048604

Kunnen jullie nog een keertje helpen?

  • Mart!
  • Registratie: Februari 2000
  • Laatst online: 23-08 14:17
Wat je mist is denk ik ook ervaring met debuggen. Zet eens een een breakpoint (zo'n rood bolletje voor de kantlijn) en run dan het project. Als het project 'breakt', typ dan in het immediate window "?commondialog.flags" Hierdoor wordt de waarde van terug gegeven. Expirimenteer eens met de mogelijke waarden in de dialog en kijk eens wat je terugkrijg in de flags-property. Zo kun je in ieder geval constateren de waarde dadwerkelijk verandert. (Je kan ook in je code de regel "debug.print commondialog.flags" opnemen, dan print'ie de waarde ook in je immediate window.

Programmeren in VB begint bij het goed kunnen debuggen in je IDE (Integrated Development Environment), goed kunnen debuggen lost 95% van je problemen namelijk op.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 15:51

Janoz

Moderator Devschuur®

!litemod

Constanten zijn gedefinieerd om het programmeren wat overzichtelijk te houden Gebruik ze dan ook!! cdlPDCollate is toch veel duidelijker dan &H10? Daarnaast weet je dan ook zeker dat je de juiste te pakken hebt!!

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
De commondialog.flags waarde verandert in geen enkel opzicht als ik dat vinkje aan/uit zet op de commondialog (tenminste, zo zegt het immediate window - tnx voor de tip Mart!). Ik heb die constante ook in m'n programma gebruikt, Janoz, maar dat helpt ook niet.
Pagina: 1