home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_6_93 / vbdos / control / custom.bas < prev    next >
BASIC Source File  |  1993-01-05  |  12KB  |  220 lines

  1. ' ----------------------------------------------------------------------------
  2. ' CUSTOM.BAS: Ereignisprozeduren für benutzerdefinierte Steuerelemente
  3. '
  4. ' Diese Ereignisprozedurschablonen für benutzerdefinierte 
  5. ' Steuerelemente wurden von CUSTGEN.EXE (Schablonengenerator 
  6. ' für benutzerdefinierte Steuerelemente) erzeugt. 
  7. ' Steuerelement-Übersetzung:
  8. '    ML -c <RegisterFile>           Geht von einem Masm 6.0-Übersetzer aus.
  9. '    BC /o <TemplateFile>;
  10. '    DEL <TemplateFile.LIB>         Löscht evtl. vorhandene Bibliothek
  11. '    LIB <TemplateFile.LIB>+<RegisterFile.OBJ>+<TemplateFile.OBJ>
  12. '    LINK /Q <TemplateFile.LIB>,<TemplateFile.QLB>,,VBDOSQLB.LIB;
  13. ' ----------------------------------------------------------------------------
  14.  
  15.  
  16. ' Include-Datei mit Konstantendefinitionen für Property-, Event-, 
  17. ' Method- und ControlType-Bezeichner.
  18. '$INCLUDE: 'CUSTINCL.BI'
  19.  
  20. ' Schaltet die Explicit-Option ein, um die Deklaration aller Variablen 
  21. ' vor dem Einsatz zu erzwingen. Anmerkung: Dies ist eine wahlfreie 
  22. ' Fehlerbeseitigungstechnik.
  23. OPTION EXPLICIT
  24.  
  25.  
  26. ' Deklariert Callback-Routinen zum Aufrufen von Methoden und Ereignissen 
  27. ' und zum Festlegen und Holen von Eigenschaften. Die von diesen 
  28. ' Callback-Routinen übernommenen Variablennummern und Argumenttypen 
  29. ' hängen von der aufgerufenen Methode bzw. dem aufgerufenen Ereignis ab. 
  30. DECLARE SUB InvokeEvent
  31. DECLARE SUB InvokeMethod
  32. DECLARE SUB GetProperty
  33. DECLARE SUB SetProperty
  34.  
  35. ' Deklariert Callback-Routinen zur Ermittlung des umgebenden Objekts 
  36. ' eines Steuerelements. Diese Callback-Routine liefert einen 
  37. ' Steuerelementbezeichner für das umgebende Objekt.
  38. DECLARE FUNCTION GetContainer (BYVAL CID AS INTEGER) AS INTEGER
  39.  
  40. ' Deklariert Callback-Routine zum Festlegen der Steuerelementattribute
  41. ' (Zugriffstaste, Verfügbarkeit für Fokus, Fähigkeit zum Auffangen von 
  42. ' Richtungstasten und Textcursorposition.) Vollständige Informationen 
  43. ' zur Verwendung dieser Callback-Routine finden Sie im Abschnitt über 
  44. ' benutzerdefinierte Steuerelemente in der LIESMICH.TXT-Datei. 
  45. DECLARE SUB SetAttribute (BYVAL CID AS INTEGER, BYVAL AID AS INTEGER, BYVAL Value AS INTEGER)
  46.  
  47. ' Deklariert eindeutige Callback-Routinen für jeden Eigenschaftsdatentyp zum 
  48. ' Festlegen und zur Ermittlung von Eigenschaftswerten, indem die die Callback-
  49. ' Routinen GetProperty und SetProperty, die jeden Datentyp übernehmen 
  50. ' können, als Parallelbezeichnungen verwendet werden. Dies sorgt für die 
  51. ' Typprüfung während der Prozeduraufrufe.
  52. DECLARE SUB GetIntProperty    ALIAS "GETPROPERTY" (Value AS INTEGER, BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  53. DECLARE SUB GetStringProperty ALIAS "GETPROPERTY" (Value AS STRING,  BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  54. DECLARE SUB GetLongProperty   ALIAS "GETPROPERTY" (Value AS LONG,    BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  55. DECLARE SUB SetIntProperty    ALIAS "SETPROPERTY" (BYVAL value AS INTEGER, BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  56. DECLARE SUB SetStringProperty ALIAS "SETPROPERTY" (Value AS STRING,        BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  57. DECLARE SUB SetLongProperty   ALIAS "SETPROPERTY" (BYVAL value AS LONG,    BYVAL CID AS INTEGER, BYVAL PID AS INTEGER)
  58.  
  59. ' Deklariert eindeutige Callback-Routinen zum Aufrufen jedes 
  60. ' Benutzerereignisses, indem die Callback-Routine InvokeEvent, deren 
  61. ' Variablenargumentanzahl und Datentyp vom aufgerufenen Ereignis abhängt, 
  62. ' als Parallelbezeichnung verwendet wird. Dies sorgt für Typprüfung 
  63. ' während der Prozeduraufrufe.
  64. DECLARE SUB InvokeChangeEvent        ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  65. DECLARE SUB InvokeClickEvent         ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  66. DECLARE SUB InvokeCustomEvent        ALIAS "INVOKEEVENT" (EventType AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  67. DECLARE SUB InvokeDblClickEvent      ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  68. DECLARE SUB InvokeDragDropEvent      ALIAS "INVOKEEVENT" (BYVAL SourceCID AS INTEGER, X AS SINGLE, Y AS SINGLE, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  69. DECLARE SUB InvokeDragOverEvent      ALIAS "INVOKEEVENT" (BYVAL SourceCID AS INTEGER, X AS SINGLE, Y AS SINGLE, State AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  70. DECLARE SUB InvokeDropDownEvent      ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  71. DECLARE SUB InvokeGotFocusEvent      ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  72. DECLARE SUB InvokeKeyDownEvent       ALIAS "INVOKEEVENT" (KeyCode AS INTEGER, Shift AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  73. DECLARE SUB InvokeKeyPressEvent      ALIAS "INVOKEEVENT" (KeyAscii AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  74. DECLARE SUB InvokeKeyUpEvent         ALIAS "INVOKEEVENT" (KeyCode AS INTEGER, Shift AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  75. DECLARE SUB InvokeLoadEvent          ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  76. DECLARE SUB InvokeLostFocusEvent     ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  77. DECLARE SUB InvokeMouseDownEvent     ALIAS "INVOKEEVENT" (Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  78. DECLARE SUB InvokeMouseMoveEvent     ALIAS "INVOKEEVENT" (Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  79. DECLARE SUB InvokeMouseUpEvent       ALIAS "INVOKEEVENT" (Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  80. DECLARE SUB InvokePaintEvent         ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  81. DECLARE SUB InvokePathChangeEvent    ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  82. DECLARE SUB InvokePatternChangeEvent ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  83. DECLARE SUB InvokeResizeEvent        ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  84. DECLARE SUB InvokeTimerEvent         ALIAS "INVOKEEVENT" (BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  85. DECLARE SUB InvokeUnloadEvent        ALIAS "INVOKEEVENT" (Cancel AS INTEGER, BYVAL CID AS INTEGER, BYVAL EID AS INTEGER)
  86.  
  87. ' Deklariert eindeutige Callback-Routinen zum Aufrufen jeder Methode für
  88. ' benutzerdefinierte Steuerelemente, indem die Callback-Routine 
  89. ' InvokeMethod, deren Variablenargumentanzahl und Datentyp von der 
  90. ' aufgerufenen Methode abhängen, als Parallelbezeichnung verwendet 
  91. ' wird. Dies sorgt für Typprüfung während der Prozeduraufrufe. 
  92. DECLARE SUB InvokePrintMethod      ALIAS "INVOKEMETHOD" (BYVAL CurrX AS INTEGER, BYVAL CurrY AS INTEGER, BYVAL FColor AS INTEGER, BYVAL BColor AS INTEGER, Text AS STRING, BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  93. DECLARE SUB InvokePrintFormMethod  ALIAS "INVOKEMETHOD" (BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  94. DECLARE SUB InvokeCLSMethod        ALIAS "INVOKEMETHOD" (BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  95. DECLARE SUB InvokeHideMethod       ALIAS "INVOKEMETHOD" (BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  96. DECLARE SUB InvokeShowMethod       ALIAS "INVOKEMETHOD" (BYVAL Modal AS INTEGER, BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  97. DECLARE SUB InvokeRefreshMethod    ALIAS "INVOKEMETHOD" (BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  98. DECLARE SUB InvokeMoveMethod       ALIAS "INVOKEMETHOD" (BYVAL mLeft AS INTEGER, BYVAL mTop AS INTEGER, BYVAL mWidth AS INTEGER, BYVAL mHeight AS INTEGER, BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  99. DECLARE SUB InvokeSetFocusMethod   ALIAS "INVOKEMETHOD" (BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  100. DECLARE SUB InvokeDragMethod       ALIAS "INVOKEMETHOD" (BYVAL Action AS INTEGER, BYVAL NumArgs AS INTEGER, BYVAL CID AS INTEGER, BYVAL MthID AS INTEGER)
  101.  
  102. 'Weckzeit wird modulübergreifend 
  103. 'global als dynamische Zeichenkette verwaltet, daher ist für
  104. 'alle Instanzen der Uhr nur eine einheitliche Weckzeit 
  105. 'verwaltbar
  106. Dim Shared AlarmZeit As String 
  107.  
  108. FUNCTION Uhr_CClick(Ctrl as Control, ByVal ControlId as Integer) AS INTEGER
  109.   Dim Zeit As String
  110.   Dim Titel As String
  111.   Dim Meldung As String
  112.   Titel = "Alarmzeit"
  113.   Meldung = "Geben Sie die Zeit im Format [HH:MM] an, zu der "
  114.   Meldung =  Meldung + "Sie an einen bestimmten Termin "
  115.   Meldung =  Meldung + "erinnert werden wollen!"
  116.   If AlarmZeit ="" Then
  117.       'Alarmzeit setzen
  118.       AlarmZeit = InputBox$(Meldung, Titel, "00:00")
  119.     Else
  120.       'Sofern bereits eingegeben, Alarmzeit als
  121.       'Vorgabezeichenkette übernehmen
  122.       AlarmZeit = InputBox$(Meldung, Titel, AlarmZeit)
  123.   End If    
  124.   '(vgl. Auswertung in Timer-Ereignisprozedur)
  125.   Uhr_CClick = 0
  126. END FUNCTION 
  127.  
  128. FUNCTION Uhr_CDblClick(Ctrl as Control, ByVal ControlId as Integer) AS INTEGER
  129.   'Weckzeit löschen
  130.   Dim Antwort As Integer
  131.   Dim Meldung As String
  132.   Dim Titel As String
  133.   Dim CrLf As String * 2
  134.   If AlarmZeit<>"" Then
  135.     'nur ausführen, wenn Alarmzeit bereits definiert wurde
  136.     CrLf = Chr$(13)+Chr$(10)
  137.     Titel = "Alarmzeit"
  138.     Meldung = "Wollen Sie die aktuell festgelegte Alarmzeit "+ CrLf
  139.     Meldung = Meldung +"["+AlarmZeit+"] löschen?"
  140.     'Sicherheitsabfrage
  141.     Antwort = MsgBox(Meldung, 4, Titel)
  142.     'Löschen wurde quittiert!
  143.     If Antwort = 6 Then
  144.       'Alarmzeit löschen
  145.       AlarmZeit = ""
  146.     End If
  147.   End If
  148.   Uhr_CDblClick = 0
  149. END FUNCTION 
  150.  
  151. FUNCTION Uhr_CTimer(Ctrl as Control, ByVal ControlId as Integer) AS INTEGER
  152.   Dim I As Integer
  153.   DIM J As Integer
  154.   Dim CrLf As String * 2
  155.   CrLf =Chr$(13)+Chr$(10)
  156.   'Ausgabebereich löschen
  157.   Ctrl.Cls
  158.   'Zeit ausgeben
  159.   If AlarmZeit = "" Then
  160.       Ctrl.Print Time$
  161.     Else   
  162.       'falls Weckzeit definiert, Zeitausgabe mit Stern
  163.       'in zweite Zeile die Weckzeit ausgeben
  164.       '(diese wird nur sichtbar, falls das Steuerelement
  165.       'auf entsprechende Größe gezoomt wurde)
  166.       Ctrl.Print Time$ +" *" + CrLf + AlarmZeit +CrLf +Str$(TimeValue(Time$))+CrLf+Str$(TimeValue(AlarmZeit))
  167.       'Kontrolle ob Alarm erforderlich
  168.       If TIMEVALUE(Time$) >= TIMEVALUE(AlarmZeit) Then
  169.         'Zeitwert der aktuellen Zeit hat den Zeitwert
  170.         'der Alarmzeit überschritten, d.h. Alarmausgabe
  171.         'Alarmzeit zurücksetzen
  172.         AlarmZeit=""
  173.         For I =1 To 5 
  174.           For J=100 To 1000 Step 20
  175.             'Sirene
  176.             Sound J,J/1000
  177.           Next J
  178.         Next I
  179.         'Ausgabe der Zeit wird automatisch beim
  180.         'nächsten Timer-Ereignis aktualisiert
  181.         'Change-Ereignis wird ausgelöst, wenn die
  182.         'Alarmzeit durch einen ausgelösten Alarm
  183.         'zurückgesetzt wird; auf das Ereignis Change
  184.         'kann der Programmierer im Hauptptogramm
  185.         'reagieren
  186.         InvokeEvent BYVAL ControlID, BYVAL EVENT_Change
  187.       End If
  188.   End If
  189.   Uhr_CTimer = 0
  190. END FUNCTION 
  191.  
  192. FUNCTION Uhr_CLoad(Ctrl as Control, ByVal ControlId as Integer) AS INTEGER
  193.   'Beim Laden des Steuerelementes wird automatisch die
  194.   'aktuelle Systemzeit ermittelt und angezeigt
  195.   'es ist keine Weckzeit beim Laden des Steuerelementes aktiv
  196.   AlarmZeit=""
  197.   'nur Zeitausgabe
  198.   Ctrl.Print Time$
  199.   Uhr_CLoad = 0
  200. END FUNCTION 
  201.  
  202. FUNCTION Uhr_CUnload(Ctrl as Control, ByVal ControlId as Integer) AS INTEGER
  203.   'Beim Entladen des Steuerelementes wird darauf hingewiesen,
  204.   'das mit der Uhranzeige auch eine eventuell eingestellte
  205.   'Alarmzeit verloren geht
  206.   Dim Meldung As String
  207.   Dim Titel As String
  208.   Dim CrLf As String * 2
  209.   CrLf = Chr$(13)+Chr$(10)
  210.   If AlarmZeit<>"" Then
  211.     Titel = "Hinweis"
  212.     Meldung = "Durch das Schließen des Dialogfeldes geht "+ CrLf
  213.     Meldung = Meldung +"die eingestellte Alarmzeit ["
  214.     Meldung = Meldung + AlarmZeit + "] verloren!"
  215.     MsgBox Meldung, 0, Titel
  216.   End If
  217.   Uhr_CUnload = 0
  218. END FUNCTION 
  219.