home *** CD-ROM | disk | FTP | other *** search
/ Programming Tool Box / SIMS_2.iso / bp_1_94 / vbwin / regdb2 / qview.frm < prev    next >
Text File  |  1993-11-14  |  10KB  |  298 lines

  1. VERSION 2.00
  2. Begin Form Form1 
  3.    BackColor       =   &H00FFFFFF&
  4.    Caption         =   "krsQuickView"
  5.    ClientHeight    =   2310
  6.    ClientLeft      =   1965
  7.    ClientTop       =   2160
  8.    ClientWidth     =   4260
  9.    Height          =   2715
  10.    Left            =   1905
  11.    LinkMode        =   1  'Source
  12.    LinkTopic       =   "system"
  13.    ScaleHeight     =   2310
  14.    ScaleWidth      =   4260
  15.    Top             =   1815
  16.    Width           =   4380
  17.    Begin Image Image1 
  18.       Height          =   2055
  19.       Left            =   0
  20.       Stretch         =   -1  'True
  21.       Tag             =   "3"
  22.       Top             =   0
  23.       Width           =   3945
  24.    End
  25. End
  26. Option Explicit
  27. '
  28. '
  29. ' **************************************************************
  30. ' * Copyright 1993 Markus Kreisel und Renate Reinartz - k.r.s. *
  31. ' * fⁿr Basic Professionell 1/94                               *
  32. ' **************************************************************
  33. '
  34. ' Bedienungsanleitung: Nicht aus dem Interpreter aus ausfⁿhren, sondern zuerst
  35. ' Make EXE File benutzen und aus dem Dateimanager aus starten.
  36. ' Danach mit Starter.exe aus Kursteil 1 oder Dateimanager Dateien mit den Endungen
  37. ' BMP WMF DIB RLE oder ICO ausfⁿhren. Voila!
  38. '
  39. Dim void
  40. Declare Function RegQueryValue& Lib "shell.dll" (ByVal hkey&, ByVal subkey$, ByVal buf$, buflen&)
  41. Declare Function RegSetValue& Lib "shell.dll" (ByVal hkey&, ByVal k1$, ByVal l&, ByVal k2$, ByVal r&)
  42. Declare Function RegEnumKey& Lib "shell.dll" (ByVal hkey&, ByVal p1&, ByVal k1$, ByVal l&)
  43.  
  44. ' Fⁿgt einen Backslash an einen String an, wenn dessen letztes Zeichen
  45. ' kein Backslash ist. Einige Funktionen liefern z.B.
  46. ' "a:\" oder "a:\test" zurⁿck. Wⁿrde man ungeprⁿft einen
  47. ' Backslash anhΣngen, dann erhielte man "a:\\" und somit
  48. ' ein Programm, das Dateien in der Root eines Dateibaums
  49. ' nicht korrekt bearbeiten k÷nnte.
  50. Function addbslash$ (ByVal t$)
  51.     If Len(t) Then
  52.         If Right$(t, 1) <> "\" Then
  53.             addbslash = t & "\"
  54.         Else
  55.             addbslash = t
  56.         End If
  57.     Else
  58.         addbslash = ""
  59.     End If
  60. End Function
  61.  
  62. Function CountChar% (ByVal t$, ByVal z%)
  63.     Dim g&, zeichen$, n&
  64.     On Error Resume Next
  65.     zeichen = Chr$(z)
  66.     Do
  67.         g = InStr(g + 1, t, zeichen)
  68.         n = n + 1
  69.     Loop While g
  70.     CountChar = n - 1
  71. End Function
  72.  
  73. Function fileexists% (ByVal Dateiname$)
  74.     On Error Resume Next
  75.     void = FileLen(Dateiname)
  76.     If Err = 0 Then fileexists = True
  77. End Function
  78.  
  79. Function FindExec$ (ByVal s$)
  80.     Dim i%, buffer$, fpath$, fname$
  81.     s = LCase$(s)
  82.     Do
  83.         buffer = Space$(144)
  84.         If RegEnumKey(1, i, buffer, Len(buffer)) = 0 Then
  85.             buffer = vbstr(LCase$(getStringPart(queryregbase(vbstr(buffer) & "\shell\open\command"), 32, 1)))
  86.             If Len(buffer) Then
  87.                 splitpathname buffer, fpath, fname
  88.                 If fname = s Then
  89.                     FindExec = buffer
  90.                     Exit Function
  91.                 End If
  92.             End If
  93.         Else
  94.             Exit Do
  95.         End If
  96.         i = i + 1
  97.     Loop
  98. End Function
  99.  
  100. ' Zerlegt cmdstr in zwei Teile und prⁿft, ob der erste Teil 'open' lautet.
  101. ' LΣdt mit dem zweiten Teil ein Bild, wenn die endung bmp ico wmf dib oder rle ist
  102. Sub Form_LinkExecute (cmdstr As String, cancel As Integer)
  103.     Dim befehl$, parameter$, fname$, fstamm$, fpath$, fext$
  104.     On Error Resume Next
  105.     befehl = LCase$(Trim$(getStringPart(cmdstr, 32, 1)))
  106.     parameter = Right$(cmdstr, Len(cmdstr) - Len(befehl) - 1)
  107.     If befehl = "open" Then
  108.         If fileexists(parameter) = True Then
  109.             splitpathname parameter, fpath, fname
  110.             splitfilename fname, fstamm, fext
  111.             If isfileoftype(fext, "bmp ico wmf dib rle") Then
  112.                 image1.Picture = LoadPicture(parameter)
  113.                 Me.ZOrder 0
  114.                 If Err = 0 Then
  115.                     cancel = False
  116.                 Else
  117.                     cancel = True
  118.                 End If
  119.             Else
  120.                 cancel = True
  121.             End If
  122.         Else
  123.             cancel = True
  124.         End If
  125.     Else
  126.         cancel = True
  127.     End If
  128. End Sub
  129.  
  130. Sub Form_Load ()
  131.     On Error Resume Next
  132.     ' Nachsehen, ob QVIEW schon angemeldet ist
  133.     If queryregbase(".dib") <> "krsQuickViewPicture" Then
  134.         If MsgBox("'" & app.Title & "' ist noch nicht in der Registrationsdatenbank angemeldet. Wollen Sie das nachholen?", 292) = 6 Then
  135.             ' anmelden
  136.             void = RegBaseWrite(".DIB", "krsQuickViewPicture")
  137.             void = RegBaseWrite(".BMP", "krsQuickViewPicture")
  138.             void = RegBaseWrite(".WMF", "krsQuickViewPicture")
  139.             void = RegBaseWrite(".RLE", "krsQuickViewPicture")
  140.             void = RegBaseWrite(".ICO", "krsQuickViewPicture")
  141.             void = RegBaseWrite("krsQuickViewPicture", "krsQuickView Bild")
  142.             void = RegBaseWrite("krsQuickViewPicture\shell\open\command", addbslash(app.Path) & "qview.exe")
  143.             void = RegBaseWrite("krsQuickViewPicture\shell\open\ddeexec", "open %1")
  144.             void = RegBaseWrite("krsQuickViewPicture\shell\open\ddeexec\IfExec", "open %1")
  145.             void = RegBaseWrite("krsQuickViewPicture\shell\open\ddeexec\application", "qview")
  146.             void = RegBaseWrite("krsQuickViewPicture\shell\open\ddeexec\topic", "system")
  147.             MsgBox "Ok, Sie k÷nnen '" & app.Title & "' jetzt vom krsStarter aus Basic Professionell 6/93 oder dem Dateimanager aus benutzen."
  148.             Unload Me
  149.         Else
  150.             MsgBox "Sorry, dann kann '" & app.Title & "' nicht laufen."
  151.             Unload Me
  152.         End If
  153.     End If
  154. End Sub
  155.  
  156. Sub Form_Paint ()
  157.     'Me.Cls
  158.     'threed Me
  159. End Sub
  160.  
  161. Sub Form_Resize ()
  162.     On Error Resume Next
  163.     If windowstate = 1 Then Exit Sub
  164.     image1.Move 0, 0, ScaleWidth, ScaleHeight
  165.     'image1.Width = ScaleWidth - 2 * image1.Left
  166.     'image1.Height = ScaleHeight - 2 * image1.Top
  167. End Sub
  168.  
  169. Function getStringPart$ (ByVal t$, ByVal z%, ByVal nr%)
  170.     Dim zeichen$, Zaehler&, i%, temp$
  171.     On Error Resume Next
  172.     Zaehler = min(CountChar(t, z) + 1, nr)
  173.     zeichen = Chr$(z)
  174.     i = 1
  175.     temp = t & zeichen
  176.     Do While i < Zaehler
  177.         temp = Right$(temp, Len(temp) - InStr(temp, zeichen))
  178.         i = i + 1
  179.     Loop
  180.     getStringPart = Left$(temp, InStr(temp, zeichen) - 1)
  181. End Function
  182.  
  183. ' Prⁿft, ob eine Dateierweiterung in einer Auswahl von M÷glichkeiten vorkommt.
  184. ' Die Erweiterungen in extensions mⁿssen durch Leerzeichen voneinander
  185. ' getrennt sein. Beispiel: "exe com pif bat". Gro▀-/Kleinschreibung wird
  186. ' ignoriert.
  187. Function isfileoftype% (ByVal checkextension$, ByVal extensions$)
  188.     On Error Resume Next
  189.     If Len(checkextension) Then
  190.         If InStr(" " & UCase$(extensions) & " ", " " & UCase$(checkextension) & " ") Then
  191.             isfileoftype = True
  192.         Else
  193.             isfileoftype = False
  194.         End If
  195.     Else
  196.         isfileoftype = False
  197.     End If
  198. End Function
  199.  
  200. Function min (ByVal a, ByVal b)
  201.     If a > b Then min = b Else min = a
  202. End Function
  203.  
  204. ' Liest einen String aus der Registrationsdatenbank. Um die Verwaltung
  205. ' einfach zu halten, beginnt die Suche immer in der ROOT der
  206. ' Datenbank.
  207. Function queryregbase$ (ByVal entry$)
  208.     Dim buf$, buflen&
  209.     On Error Resume Next
  210.     buf = Space$(80)
  211.     buflen = Len(buf)
  212.     ' 1 = von ROOT aus lesen
  213.     ' buflen wird von der Funktion geΣndert, deshalb wΣre
  214.     ' RegQueryValue(1, entry, buf, len(buf)) falsch.
  215.     If RegQueryValue(1, entry, buf, buflen) = 0 Then
  216.         If buflen > 1 Then
  217.             ' Die Rⁿckgabe in buflen zΣhlt chr$(0) am Ende mit
  218.             ' Also ein Zeichen abziehen, aber natⁿrlich nur dann,
  219.             ' wenn chr$(0) nicht das einzige Zeichen in der Rⁿckgabe ist.
  220.             queryregbase = Left$(buf, buflen - 1)
  221.         Else
  222.             queryregbase = ""
  223.         End If
  224.     Else
  225.         queryregbase = ""
  226.     End If
  227. End Function
  228.  
  229. Function RegBaseWrite% (ByVal entry$, ByVal value$)
  230.     ' erstes 1& = ROOT
  231.     ' zweites 1& = reserviert
  232.     RegBaseWrite = RegSetValue(1&, entry, 1&, value, Len(value))
  233. End Function
  234.  
  235. ' Einfache Suchen- und Ersetzenfunktion fⁿr Stringteile.
  236. ' Wenn src mehrfach gefunden wird, dann wird es auch mehrfach durch
  237. ' rpl ersetzt. Gro▀-/Kleinschreibung wird ignoriert, so da▀
  238. ' sich die Funktion speziell fⁿr Pfadoperationen und Σhnliches anbietet.
  239. Function replaceStringpart$ (ByVal source$, ByVal src$, ByVal rpl$)
  240.     Dim pos&
  241.     On Error Resume Next
  242.     src = UCase$(src)
  243.     pos = InStr(UCase$(source), src)
  244.     If src <> UCase$(rpl) Then
  245.         Do While pos
  246.             source = Left$(source, pos - 1) & rpl & Right$(source, Len(source) - pos - Len(src) + 1)
  247.             pos = InStr(pos + Len(rpl), UCase$(source), src)
  248.         Loop
  249.     End If
  250.     replaceStringpart = source
  251. End Function
  252.  
  253. ' Zerlegt einen Dateinamen ohne Pfad in den Stammteil des Namens
  254. ' und die Dateierweiterung.
  255. ' Fⁿr kompletten Dateinamen ggf. zuerst splitpathname aufrufen
  256. Sub splitfilename (ByVal fname$, fbody$, fext$)
  257.     Dim p%
  258.     On Error Resume Next
  259.     p = InStr(fname, ".")
  260.     If p Then
  261.         fbody = Left$(fname, p - 1)
  262.         fext = Mid$(fname, p + 1, Len(fname) - p)
  263.     Else
  264.         fbody = fname
  265.         fext = ""
  266.     End If
  267. End Sub
  268.  
  269. ' Zerlegt einen kompletten Dateiname in Pfad und Dateiname ohne Pfad
  270. Sub splitpathname (ByVal fullname$, fpath$, fname$)
  271.     Dim i%, p%
  272.     On Error Resume Next
  273.     Do
  274.         p = i
  275.         i = InStr(i + 1, fullname, "\")
  276.     Loop While i
  277.     If p Then
  278.         fpath = Left$(fullname, p)
  279.     End If
  280.     fname = Right$(fullname, Len(fullname) - p)
  281. End Sub
  282.  
  283. ' Funktion zum Wandeln von ASCIIZ-Strings in VB-Strings.
  284. ' Entfernt auch fⁿhrende und folgende Leerzeichen.
  285. Function vbstr$ (ByVal c$)
  286.     Dim pos&
  287.     pos = InStr(c, Chr$(0))
  288.     Select Case pos
  289.     Case Is > 1
  290.         vbstr = Trim$(Left$(c, pos - 1))
  291.     Case 1
  292.         vbstr = ""
  293.     Case 0
  294.         vbstr = Trim$(c)
  295.     End Select
  296. End Function
  297.  
  298.