home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Programming Tool Box
/
SIMS_2.iso
/
bp_6_93
/
vbdos
/
control
/
register.asm
< prev
next >
Wrap
Assembly Source File
|
1993-01-05
|
13KB
|
276 lines
; ----------------------------------------------------------------------------
; REGISTER.ASM: Initialisierungs- und IsHandler-Routinen für
; benutzerdefinierte Steuerelemente.
;
; Initialisierungssegment und IsHandler-Routine wurden vom
; Schablonengenerator für benutzerdefinierte Steuerelemente
; CUSTGEN.EXE erzeugt.
;
; CUSTGEN.EXE ist ein Dienstprogramm, das die Erstellung von
; benutzerdefinierten Steuerelementen erleichtert. Es ermöglicht
; Ihnen, die Ereignisse auszuwählen, auf die Ihr benutzerdefiniertes
; Steuerelement reagieren soll, und dann erzeugt es entsprechende
; Code-Schablonen und eine Registerroutine für diese Ereignisse.
;
; Ändern Sie die Code-Schablonendatei wie erforderlich und
; erstellen Sie dann Ihr benutzerdefiniertes Steuerelement wie folgt:
; ML -c <RegisterFile> ; Geht von einem Masm 6.0-Übersetzer aus
; BC /o <TemplateFile>; ; Verwendet den für den Schablonen-
; ; Quellcode geeigneten Übersetzer.
; DEL <TemplateFile.LIB> ; Löscht evtl. vorhandene Bibliothek.
; LIB <TemplateFile.LIB>+<RegisterFile.OBJ>+<TemplateFile.OBJ>
; LINK /Q <TemplateFile.LIB>,<TemplateFile.QLB>,,VBDOSQLB.LIB;
; Sie können mehrere benutzerdefinierte Steuerelemente zu einer
; einzelnen Quick-Bibliothek für den Einsatz in der Programmierumgebung
; wie folgt kombinieren:
; DEL <CombinedLib.LIB> ; Löscht evtl. vorhandene Bibliothek.
; LIB <CombinedLib.LIB>+<Cust1.LIB>+<Cust2.LIB>+<CustN.LIB>
; LINK /Q <CombinedLib.LIB>,<CombinedLib.QLB>,,VBDOSQLB.LIB;
; Um eine Alternate Math-Bibliothek für benutzerdefinierte Steuerelemente
; (statt der oben angegebenen Emulator Math-Bibliothek für
; TemplateFile-Prozedur mit der /FPa-Option. Anmerkung: eine Altmath-
; Bibliothek kann nicht zur Erstellung einer Quick-Bibliothek verwendet
; werden.
;
;
; Copyright (C) 1991-1992 Microsoft Corporation
;
; Sie haben das lizenzgebührfreie Recht, die mit Visual Basic
; für MS-DOS gelieferten Beispielanwendungsdateien und
; Werkzeugsammlungen (und/oder jede modifizierte Version) auf jede
; Art und Weise, die Ihnen sinnvoll erscheint, zu benutzen, zu ändern,
; zu vervielfältigen und zu verteilen unter der Bedingung, daß
; Sie zustimmen, daß Microsoft keine Garantie, Verpflichtung oder Haftung
; für irgendeine der Beispielanwendungsdateien oder Werkzeugsammlungen
; übernimmt.
; ----------------------------------------------------------------------------
; Speichermodell und Include-Dateien.
.MODEL medium, basic
INCLUDE CUSTINCL.INC
; Far extern-Deklarationen für die Ereignisbehandlungsroutinen der
; benutzerdefinierten Steuerelemente.
EXTRN Uhr_CClick:FAR
EXTRN Uhr_CDblClick:FAR
EXTRN Uhr_CTimer:FAR
EXTRN Uhr_CLoad:FAR
EXTRN Uhr_CUnload:FAR
PUBLIC BCC$UHR ; Öffentliche Deklarationen zum
BCC$UHR EQU 5253H ; Einbinden des erforderlichen
; Codes beim Verknüpfen der EXE-Datei. Muß aus
; 'BCC$' plus der TypeID-Zeichenfolge bestehen,
; sonst wird der Code mit dem Programm nicht
; verknüpft.
; Initialisierungssegment für benutzerdefinierte Steuerelemente
;
; Beachten Sie: Dieses Segment kann Initialisierungsinformationen für
; mehrere benutzerdefinierte Steuerelemente enthalten. Geben Sie
; hierzu einfach die erforderlichen Informationen in der richtigen
; Reihenfolge für jedes benutzerdefinierte Steuerelement an.
DGROUP GROUP XECIB, XECI, XECIE
XECIB SEGMENT WORD PUBLIC 'DATA' ; Beginn des Initialisierungssegments
XECIB ENDS
XECI SEGMENT WORD PUBLIC 'DATA'
DW OFFSET UhrType ; ID-Zeichenfolge für
; benutzerdefiniertes Steuerelement. Muß
; alphanumerisch sein und mit einem
; alphabetischen Zeichen beginnen. Near-Zeiger
; auf nullterminierte Zeichenfolge in
; Datensegment.
DW lenUhrType ; Länge der Zeichenfolge (ausgehende
; Null nicht eingeschlossen, Max = 25)
DD UhrIsHandler ; Far-Zeiger auf IsHandler.
DW 0 ; Attribut (0,1) legt fest, ob Steuerelement
; ein umgebendes Objekt sein kann.
BeginEventMasks ; Ereignismasken
MaskItem EVENT_Click
MaskItem EVENT_Custom
MaskItem EVENT_DblClick
MaskItem EVENT_DragDrop
MaskItem EVENT_DragOver
MaskItem EVENT_DropDown
MaskItem EVENT_GotFocus
MaskItem EVENT_KeyDown
MaskItem EVENT_KeyPress
MaskItem EVENT_KeyUp
MaskItem EVENT_LostFocus
MaskItem EVENT_MouseDown
MaskItem EVENT_MouseMove
MaskItem EVENT_MouseUp
MaskItem EVENT_Paint
MaskItem EVENT_PathChange
MaskItem EVENT_PatternChange
MaskItem EVENT_Resize
MaskItem EVENT_Timer
MaskItem EVENT_Unload
MaskItem EVENT_Load
EndEventMasks
BeginPropertyMasks ; Eigenschaftsmasken
MaskItem PROP_Action
MaskItem PROP_Alignment
MaskItem PROP_Archive
MaskItem PROP_AutoRedraw
MaskItem PROP_Caption
MaskItem PROP_Checked
MaskItem PROP_DragMode
MaskItem PROP_Column
MaskItem PROP_Drive
MaskItem PROP_Enabled
MaskItem PROP_Filename
MaskItem PROP_Hidden
MaskItem PROP_LargeChange
MaskItem PROP_Left
MaskItem PROP_ListCount
MaskItem PROP_ListIndex
MaskItem PROP_Max
MaskItem PROP_Min
MaskItem PROP_Mode
MaskItem PROP_MousePointer
MaskItem PROP_MultiLine
MaskItem PROP_Normal
MaskItem PROP_Path
MaskItem PROP_Pattern
MaskItem PROP_ReadOnly
MaskItem PROP_Row
MaskItem PROP_ScrollBars
MaskItem PROP_SelLength
MaskItem PROP_SelStart
MaskItem PROP_SelText
MaskItem PROP_SmallChange
MaskItem PROP_Sorted
MaskItem PROP_Style
MaskItem PROP_System
MaskItem PROP_TabIndex
MaskItem PROP_TabStop
MaskItem PROP_Tag
MaskItem PROP_Text
MaskItem PROP_Top
MaskItem PROP_Value
EndPropertyMasks
XECI ENDS
XECIE SEGMENT WORD PUBLIC 'DATA' ; Ende des Initialisierungssegments.
XECIE ENDS
.DATA
UhrType DB "Uhr",0h ; TypeID-Zeichenfolge für benutzerdefinierte
; Steuerelemente. Muß alphanumerisch sein und
; mit einem alphabetischen Zeichen beginnen.
lenUhrType = $ - UhrType - 1 ; Länge der Zeichenfolge
; (ausgehende Null nicht eingeschlossen,
; Max = 25)
.CODE Uhr_TEXT
; Behandlungsroutinen-Adressentabelle für benutzerdefinierte
; Steuerelemente. Zur Verwendung mit einer tabellengesteuerten
; IsHandler-Routine. Die Tabelle enthält die Adresse der
; Ereignisbehandlungsroutine für Ereignisse, die durch das
; benutzerdefinierte Steuerelement aufgefangen oder verarbeitet
; werden. Die Tabelle enthält ein Long 0 für Ereignisse, die vom
; benutzerdefinierten Steuerelement nicht aufgefangen oder
; verarbeitet, sondern falls zutreffend direkt an den Benutzercode
; übergeben werden.
UhrTable LABEL DWORD
DD 0 ; Skipped table entry: DO NOT REMOVE
DD Uhr_CClick ;Click
DD 0 ; Skipped table entry: DO NOT REMOVE
DD Uhr_CDblClick ;DblClick
DD 0 ;DragDrop
DD 0 ;DragOver
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ;GotFocus
DD 0 ;KeyDown
DD 0 ;KeyPress
DD 0 ;KeyUp
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ;LostFocus
DD 0 ;MouseDown
DD 0 ;MouseMove
DD 0 ;MouseUp
DD 0 ;Paint
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ; Skipped table entry: DO NOT REMOVE
DD Uhr_CTimer ;Timer
DD 0 ; Skipped table entry: DO NOT REMOVE
DD Uhr_CLoad ;Load
DD 0 ;IntegerGet
DD 0 ;IntegerSet
DD 0 ;LongGet
DD 0 ;LongSet
DD 0 ;StringGet
DD 0 ;StringSet
DD Uhr_CUnload ;Unload
DD 0 ;MthAddItem
DD 0 ;MthCls
DD 0 ;MthHide
DD 0 ;MthMove
DD 0 ;MthPrint
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ;MthRefresh
DD 0 ;MthRemoveItem
DD 0 ;MthSetFocus
DD 0 ;MthShow
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ; Skipped table entry: DO NOT REMOVE
DD 0 ;MthDrag
lenUhrTable = ($ - UhrTable)/4 ; Number of entries in table
; IsHandler-Routine für das benutzerdefinierte Steuerelement.
; Visual Basic ruft diese Routine bei jedem Auftreten eines
; für das benutzerdefinierte Steuerelement bestimmten Ereignisses
; auf. Der Ereignisbezeichner (EventID) des Ereignisses wird
; an die IsHandler-Routine übergeben, welche die Adresse der
; Ereignisbehandlungsroutine des benutzerdefinierten Steuerelements
; für das jeweilige Ereignis liefert. Falls das benutzerdefinierte
; Steuerelement nicht in der Lage ist, das Ereignis aufzufangen bzw.
; zu verarbeiten, liefert IsHandler ein Long 0 und das Ereignis wird
; falls zutreffend an den Code des Benutzers übergeben.
;
; Diese IsHandler-Routine verwendet eine tabellengesteuerte Technik
; zum Liefern der Adresse einer Ereignisbehandlungsroutine oder 0
; (die Tabellendefinition ist oben angegeben) Es können jedoch auch
; andere Methoden zum hierzu verwendet werden.
PUBLIC UhrIsHandler
UhrIsHandler PROC , EventId:WORD
MOV bx, EventId ;[bx] = event Id
CMP bx, lenUhrTable ; Ist Wert im zulässigen Bereich?
JAE OutOfRange ;Bricht ab und liefert 0:0
ADD bx, bx
ADD bx, bx ;[bx] = dword-Index
LES ax, UhrTable[bx-4] ;[es:ax] = Adresse der
; Behandlungsroutine
MOV dx, es ;[dx:ax] = Adresse der
; Behandlungsroutine / 0
RET
OutOfRange:
XOR ax, ax
CWD
RET
UhrIsHandler ENDP
END