Ein Programm in VB zu programmieren ist eine Sache, die dazugehörigen Hilfe-Dateien zu schreiben ist für viele jedoch ein "Horror". Im Zeitalter von Windows 2000 und Windows XP erwarten die Anwender ein modernes HTML-Hilfesystem. Dieser Workshop zeigt, wie sich ein solches Hilfesystem mit VB-Boardmitteln programmieren lässt. Das Prinzip - kurz erklärt Zu einem modernen Programm gehört auch ein modernes Hilfesystem. Das derzeitgängigste Hilfesystem ist HTMLHelp, d.h. die gesamte Online-Hilfe besteht aus vielen einzelnen HTML-Seiten. Normalerweise verwendet man für ein HTML-Hilfesystem den Microsoft HTMLHelp Compiler, der aus den gesamten HTML-Seiten eine "Stand-Alone-Hilfedatei" (.CHM) generiert, die dann mit Hilfe der API-Funktionen der HHCTRL.OCX-Komponente aufgerufen werden kann. Ziel dieses Workshops soll es jetzt sein, sowohl auf den "Microsoft HTMLHelp Compiler", als auch auf die HHCTRL.OCX-Komponente zu verzichten. Vielmehr möchten wir unser eigenes HTML-Hilfesystem "bauen", d.h. wir steuern die Anzeige und die Navigation der HTML-Hilfe selbst. Schaut man sich das Microsoft HTMLHelp-System einmal näher an, so stellt man schnell fest, dass man für die Anzeige und Navigation durch das Hilfesystem im Großen und Ganzen nur 2 Controls benötigt:
Aufbau des Inhaltsverzeichnisses Die einzelnen Hilfeseiten (HTML-Dateien) legt man am Besten gemeinsam in einem Unterordner innerhalb des Anwendungsverzeichnisses ab (z.B. help\). Das Inhaltsverzeichnis, das später im TreeView-Control angezeigt werden soll, erstellen wir als ganz gewöhnliche Textdatei, wobei Unterthemen einfach per TAB eingerückt werden. Das schaut dann wie folgt aus: Allgemeines Inhalt Features|Einführung.htm Registrierung Verwenden der Komponente Wichtiger Hinweis: Debuggen|Debuggen.htm Anmerkung: Bitmaphandles|Bitmaphandles.htm Windows XP und Manifest Dateien|Windows XP.htm Weitergabe von Dateien Systemvoraussetzungen Technischer Support Copyright Referenz sevMenuXP Controls und Objekte|sevMenuXP Referenz.htm MenuBar-Control Alle Funktionen im Ueberblick|MenuBar-Control.htm Eigenschaften AutoFreeHandles BackColor BalloonToolTips Die Hauptthemen (Root-Nodes) beginnen immer direkt am Zeilenanfang. Die jeweiligen Unterthemen werden hingegen per TAB-Taste eingerückt. Sollte die HTML-Datei anders lauten als das Thema, muss der Dateiname im Anschluss an das Thema angegeben werden, getrennt durch das Pipe-Zeichen (|). Ist der Dateiname der HTML-Datei identisch mit dem Thema, braucht dieser nicht explizit angegeben werden. Wichtig ist jedoch, dass die Dateiendung immer HTM lautet (nicht HTML!). Nachdem Sie das Inhaltsverzeichnis im Windows-Editor erstellt haben, speichern Sie die Datei bitte als node.txt in das Programmverzeichnis. Index - Schlüsselwörter Zusätzlich zum Inhaltsverzeichnis möchten wir unser HTML-Hilfesystem mit einer INDEX-Registerkarte ausstatten. Beim Klick auf das Index-Register sollen dann die wichtigsten Schlüsselwörter in Form einer alphabetisch sortierten Liste angezeigt werden. Die Schlüsselwörter selbst müssen ebenfalls wieder in Form einer Textdatei vorliegen. Der Aufbau hierbei ähnelt stark einer INI-Datei, was auch beabsichtigt ist [List] 1=Inhalt 2=Features|Einführung.htm 3=Registrierung 4=Verwenden der Komponente 5=Wichtiger Hinweis Debuggen|Debuggen.htm 6=Anmerkung: Bitmaphandles|Bitmaphandles.htm 7=Windows XP und Manifest Dateien|Windows XP.htm 8=Weitergabe von Dateien 9=Systemvoraussetzungen 10=Technischer Support 11=Copyright 12=sevMenuXP Controls und Objekte|sevMenuXP Referenz.htm 13=Alle Funktionen im Ueberblick|MenuBar.htm 14=AutoFreeHandles 15=BackColor 16=BalloonToolTips Erstellt wird die Index-Datei wiederum im Windows-Editor und unter dem Namen index-tab.txt im Programmverzeichnis abgelegt. Favoriten Neben dem Inhaltsverzeichnis und der Index-Liste könnte man zusätzlich noch eine Favoriten-Liste als eigenes Registerblatt anzeigen. Auf diese Weise kann der Anwender bestimmte Themen der Hilfe für den schnellen Zugriff in der Favoritenliste ablegen. Die Favoritenliste wird ebenfalls wieder als gewöhnliche Textdatei mit INI-Charakter gespeichert. Der Aufbau sieht wie folgt aus: [List] 1=http://www.vbarchiv.net 2=file:\\D:\VB6\Orion\HTMLWorkshop\Help\Registrierung.htm Wie Sie sehen, können in der Favoritenliste auch "echte" URL's gespeichert sein, denn wir verwenden für die Anzeige der HTML-Seiten ja das WebBrowser-Control. Soviel zur Vorbereitung. Jetzt geht's weiter mit dem Aufbau der VB-Form zur Anzeige der HTML-Hilfe. Aufbau der Form für die Anzeige der HTML-Hilfe Erstellen Sie ein neues Projekt und aktivieren über den Dialog Projekt - Komponenten folgende beiden Einträge:
Platzieren Sie auf die Form1 ein Registersteuerelement (TabStrip1) und rechts daneben ein WebBrowser-Control. Alle benötigten Bildsymbole werden in einem ImageList-Control abgelegt, das Sie ebenfalls auf das Formular ziehen. Für die Anzeige des Inhaltsverzeichnisses benötigen wir das TreeView-Control. Ziehen Sie dieses auf die Form. Die Position und Größe spielt keine Rolle, da alle Controls zur Laufzeit an die aktuelle Fenstergröße angepasst werden. Neben dem TreeView-Control brauchen wir noch zwei ListBox-Controls (List1 und List2) für die Auflistung der Schlüsselwörter bzw. der Favoriten-Einträge. Zusätzlich soll der Anwender die Möglichkeit haben, beliebige URL's in die Favoritenliste einzutragen. Hierfür benötigen wir noch eine TextBox, sowie einen CommandButton. Hiermit hätten wir alle benötigten Controls auf die Form platziert. Bevor wir mit dem "Coden" beginnen, müssen jedoch noch folgende Control-Eigenschaften festgelegt werden, da es sich hierbei um Eigenschaften handelt, die nur zur Entwurfszeit geändert werden können.
Die Bildsymbole für das Registersteuerelement, sowie das TreeView-Control sollten ebenfalls zur Entwurfszeit ausgewählt werden. Über nachfolgenden Link können Sie sich die entsprechenden Bildsymbole downloaden: Fügen Sie dem ImageList nachfolgende Bildsymbole mit folgenden Key-Werten hinzu:
Damit wäre der Formularaufbau abgeschlossen. Initialisieren der Controls Beim Laden der Form müssen zunächst ein paar Controls initialisiert werden. Hierzu zählt u.a. das Registersteuerelement, für das wir die benötigten Registerkarten erstellen müssen. Private Sub Form_Load() ' Registerreiter erstellen With TabStrip1 .Width = 225 * Screen.TwipsPerPixelX Set .ImageList = ImageList1 .Tabs.Clear .Tabs.Add , , "Inhalt", "contents" .Tabs.Add , , "Index", "index" .Tabs.Add , , "Favoriten", "favorites" End With ' TreeView-Eigenschaften festlegen With TreeView1 Set .ImageList = ImageList1 .Indentation = 250 .HideSelection = False .LabelEdit = tvwManual End With ' Favoriten Text1.Text = "" Command1.Font.Name = "Marlett" Command1.Font.Size = 10 Command1.Font.Bold = False Command1.Caption = "b" ' Form_Resize-Ereignis aufrufen Form_Resize End Sub Positionieren der Controls zur Laufzeit Kommen wir jetzt zum Positionieren der Controls. Dies erledigen wir per Code zur Laufzeit - und zwar im Form_Resize-Ereignis, da dieses Ereignis immer dann ausgelöst wird, wenn sich die Formgröße ändert. Private Sub Form_Resize() ' Controls an aktuelle Fenstergröße anpassen If Me.WindowState <> vbMinimized Then ' WebBrowser With WebBrowser1 .Top = 105 .Left = TabStrip1.Left + TabStrip1.Width + 105 If Me.ScaleWidth > .Left + 105 Then .Width = Me.ScaleWidth - .Left - 105 End If If Me.ScaleHeight > .Top + 105 Then .Height = Me.ScaleHeight - .Top - 105 End If End With ' Registersteuerelement With TabStrip1 .Move 105, 105 Text1.Move 210, 535 Text1.Width = .Width - Text1.Height - 210 Command1.Move Text1.Left + Text1.Width + 30, Text1.Top, _ Text1.Height, Text1.Height List1.Move Text1.Left, Text1.Top + Text1.Height + 60 List1.Width = .Width - 210 List2.Move Text1.Left, Text1.Top List2.Width = List1.Width TreeView1.Move Text1.Left, Text1.Top TreeView1.Width = List1.Width If Me.ScaleHeight > .Top + 105 Then .Height = Me.ScaleHeight - .Top - 105 TreeView1.Height = .Height - 540 List1.Height = .Height - 905 List2.Height = .Height - 555 End If End With End If End Sub Sichtbar/Unsichtbarmachen von Controls Bis jetzt sind immer alle Controls sichtbar, auch wenn sie sich teilweise selbst verdecken. Besser ist es jedoch, wenn immer nur diejenigen Controls sichtbar sind, die auch tatsächlich benötigt werden. Je nach ausgewählter Registerkarte handelt es sich hierbei um:
Weiterhin soll beim Start der Hilfe immer das Register Inhalt geöffnet sein. Wir erweitern demzufolge das Form_Load Ereignis um folgende Codezeilen: Private Sub Form_Load() ... ' Beim Start Register "Inhalt" öffnen Set TabStrip1.SelectedItem = TabStrip1.Tabs(1) End Sub Beim Wechseln der Registerkarte wird das TabStrip1_Click-Ereignis ausgelöst, in dem wir die jeweiligen Controls ein-/ausblenden können. Private Sub TabStrip1_Click() ' Controls ein/ausblenden With TabStrip1 TreeView1.Visible = (.SelectedItem.Index = 1) List2.Visible = (.SelectedItem.Index = 2) Text1.Visible = (.SelectedItem.Index = 3) Command1.Visible = (.SelectedItem.Index = 3) List1.Visible = (.SelectedItem.Index = 3) End With End Sub Hilfethemen laden und anzeigen Kommen wir jetzt langsam zum interessanten Teil unseres HTML-Hilfesystems: dem Laden und Anzeigen der Hilfeseiten. Die einzelnen Hilfethemen und ihre Unterseiten sollen hierbei strukturiert im TreeView-Control aufgelistet werden. Beim Klick auf einen Eintrag soll dann die Hilfeseite im WebBrowser-Control angezeigt werden. Für das "Füllen" des TreeView-Controls erstellen wir uns eine eigene Prozedur mit folgenden Parametern:
Die Textdatei wird hierbei zeilenweise bis zum Dateiende ausgelesen. Anhand der Anzahl TAB-Zeichen am Anfang der Zeile wird die "Tiefe" im TreeView-Control bestimmt. Enthält die Zeile kein TAB-Zeichen handelt es sich um einen "Parent"-Eintrag, andernfalls um einen "Child"-Eintrag. Wie bereits eingangs erläutert müssen wir beim Einlesen der Zeilen prüfen, ob hier zusätzlich der HTML-Dateiname angegeben wurde. Ist dies nicht der Fall, prüfen wir, ob es im Unterordner help\ eine Datei mit der Themenbezeichnung und der Endung .HTM existiert. Der Dateiname selbst wird als "Key" zum jeweiligen Node-Objekt gespeichert. Auf diese Weise können wir im NodeClick-Ereignis schnell den Dateinamen der anzuzeigenden Hilfeseite ermitteln. Jetzt kann es natürlich vorkommen, dass mehrere Themen auf ein- und dieselbe Hilfedatei verweisen. In diesem Fall würden wir eine Fehlermeldung "Duplicate Key-Value" erhalten. Dem wollen wir natürlich vorbeugen und stellen hierzu einfach den Index des aktuellen Node-Objekts voran. ' TreeView-Navigation einlesen ' Die einzelnen Einträge befinden sich hierbei in einer Textdatei Private Sub LoadTreeViewFromFile(ByVal file_name As String, _ ByRef trv As TreeView) Dim fnum As Integer Dim text_line As String Dim level As Integer Dim tree_nodes() As Node Dim num_nodes As Integer Dim sHTMFile As String ' Datei öffnen fnum = FreeFile Open file_name For Input As fnum With trv ' Nodes löschen .Nodes.Clear ' zeilenweise einlesen bis Dateiende erreicht Do While Not EOF(fnum) ' Eintrag lesen Line Input #fnum, text_line ' Finde den Level des Einzugs level = 1 Do While Left$(text_line, 1) = vbTab level = level + 1 text_line = Mid$(text_line, 2) Loop ' Array redimensionieren If level > num_nodes Then num_nodes = level ReDim Preserve tree_nodes(1 To num_nodes) End If ' HTML-Dateiname ermitteln ' Der Dateiname wird hierbei in der Key-Eigenschaft ' des TreeView-Eintrags gespeichert. ' Damit es zu keiner Fehlermeldung kommt, falls zwei ' Themen auf die gleiche Hilfeseite verweisen, stellen ' wir einfach den aktuellen Index voran. If InStr(text_line, "|") > 0 Then sHTMFile = Mid$(text_line, InStr(text_line, "|") + 1) text_line = Left$(text_line, InStr(text_line, "|") - 1) Else sHTMFile = text_line & ".htm" End If If Not FileExists(App.Path & "\help\" & sHTMFile) Then sHTMFile = "" Else sHTMFile = "i" & CStr(.Nodes.Count + 1) & vbTab & sHTMFile End If ' Neues Node-Objekt hinzufügen If level = 1 Then ' Als Icon "geschlossenes Buch" anzeigen (siehe ImageList Control) Set tree_nodes(level) = .Nodes.Add(, , sHTMFile, text_line, "closed") ' Bei Selektion: Icon "geöffnetes Buch" anzeigen tree_nodes(level).ExpandedImage = "open" tree_nodes(level).Expanded = True Else ' Unterseite mit Icon "leaf" anzeigen Set tree_nodes(level) = .Nodes.Add(tree_nodes(level - 1), tvwChild, sHTMFile, _ text_line, "leaf") tree_nodes(level).EnsureVisible End If Loop End With Close #fnum End Sub ' Prüfen, ob Datei existiert Public Function FileExists(ByVal sFile As String) As Boolean On Error Resume Next FileExists = (Dir$(sFile) <> "") On Error GoTo 0 End Function Der Aufruf der LoadTreeViewFromFile-Prozedur erfolgt im Form_Load-Ereignis der Form. Und damit beim Starten der Form nicht auf einmal der Windows-Internet-Verbinden-Dialog angezeigt wird, laden wir eine leere Seite in das WebBrowser-Control. Private Sub Form_Load() ... ' Inhaltsverzeichnis einlesen und anzeigen LoadTreeViewFromFile App.Path & "\node.txt", TreeView1 ' Lädt eine Web Seite, um zu verhindern dass ' der Dialog "Connect to Internet" erscheint WebBrowser1.Navigate "about:blank" End Sub Jetzt fehlt nur noch die Anzeige der Hilfeseite beim Klick auf einen Eintrag im TreeView-Control: Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node) ' Help-Seite im WebBrowser-Control anzeigen If Node.Key <> "" Then Dim sFile As String sFile = Mid$(Node.Key, InStrRev(Node.Key, vbTab) + 1) WebBrowser1.Navigate "file:\\" & App.Path & "\Help\" & sFile ' Seite in die TextBox "Favoriten" eintragen, so dass der ' Anwender diese per Klick auf den CommandButton in die ' Favoritenliste mit aufnehmen kann. Text1.Text = "file:\\" & App.Path & "\Help\" & sFile End If End Sub Erweitern wir abschließend nochmals das Form_Load-Ereignis, so dass beim Starten der Form autom. die 1. Hilfeseite im WebBrowser-Control angezeigt wird: Private Sub Form_Load() ... ' HTML-Hilfeseite anzeigen (2. Eintrag im TreeView-Control) With TreeView1 .Nodes(1).EnsureVisible If .Nodes(1).Key <> "" Then ' Falls zum Hauptthema eine Hilfeseite existiert... Set .SelectedItem = .Nodes(1) Else ' ... wenn nicht, Hilfeseite der 1. Unterseite anzeigen Set .SelectedItem = .Nodes(2) End If ' Sicherstellen, dass die Seite auch tatsächlich angezeigt wird TreeView1_NodeClick .SelectedItem End With End Sub Index-Seite und Favoriten-Liste Kommen wir nun zu der Index-Seite mit den Schlüssel-/Schlagwörtern, die ja ebenfalls aus einer Datei ausgelesen werden. Der Aufbau der Datei ähnelt dem einer INI-Datei mit "Abschnitt" in eckigen Klammern und anschließenden Key-/Schlüsselwerten. Aus diesem Grund können wir die Datei auch bequem mit Hilfe der API-Funktion GetPrivateProfileString auslesen. Fügen wir in den Allgemein-Teil der Form also folgende Deklaration ein: Option Explicit ' Benötigte API-Deklarationen ' INI lesen + schreiben Private Declare Function OSGetPrivateProfileString Lib "KERNEL32" _ Alias "GetPrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long Private Declare Function OSWritePrivateProfileString Lib "KERNEL32" _ Alias "WritePrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String) As Long Private Const nBUFSIZEINI = 1024 Private Const nBUFSIZEINIALL = 4096 ' INI-Eintrag lesen Private Function GetINIString(ByVal szSection As String, _ ByVal szEntry As Variant, _ ByVal szDefault As String, _ ByVal szFileName As String) As String Dim szTmp As String Dim nRet As Long If (IsNull(szEntry)) Then szTmp = String$(nBUFSIZEINIALL, 0) nRet = OSGetPrivateProfileString(szSection, 0&, szDefault, _ szTmp, nBUFSIZEINIALL, szFileName) Else szTmp = String$(nBUFSIZEINI, 0) nRet = OSGetPrivateProfileString(szSection, CStr(szEntry), _ szDefault, szTmp, nBUFSIZEINI, szFileName) End If GetINIString = Left$(szTmp, nRet) End Function ' INI-Eintrag speichern Private Sub WriteINIString(ByVal szSection As String, _ ByVal szEntry As Variant, _ ByVal vValue As Variant, _ ByVal szFileName As String) Dim nRet As Long If (IsNull(szEntry)) Then nRet = OSWritePrivateProfileString(szSection, 0&, 0&, _ szFileName) ElseIf (IsNull(vValue)) Then nRet = OSWritePrivateProfileString(szSection, CStr(szEntry), _ 0&, szFileName) Else nRet = OSWritePrivateProfileString(szSection, CStr(szEntry), _ CStr(vValue), szFileName) End If End Sub Entsprechende Erläuterungen zum Umgang mit INI-Dateien können Sie in unserem Workshop INI-Dateien bearbeiten und verwalten nachlesen. Index-Seite erstellen Für das Füllen der Liste für die Index-Seite müssen wir lediglich die Datei index-tab.txt auslesen und die einzelnen Zeilen (Schlüsselwörter) in die ListBox List2 übertragen. Beim Klick auf einen Eintrag der ListBox wird dann die entsprechende Hilfeseite im WebBrowser-Control angezeigt. Den Dateinamen der Hilfeseite speichern wir hierzu direkt im ListBox-Eintrag, allerdings so, dass der Anwender diesen nicht sehen kann Hierzu bedienen wir uns folgenden Tricks: Wir fügen nach dem Stichwort einfach ein paar Tabulator-Zeichen ein. Erst dann kommt der Dateiname. Dieser ist dann zwar im List-Eintrag enthalten, wirdauf Grund der Tabulatorzeichen aber "außerhalb" des sichtbaren ListBox-Eintrags angezeigt. ' ListBox-Inhalt aus INI-Datei auslesen Public Sub LoadList(oListBox As ListBox, ByVal FileName As String) Dim nCount As Long Dim sText As String nCount = 0 ' Inhalt der Liste löschen With oListBox .Clear Do ' Eintrag aus INI-Liste lesen nCount = nCount + 1 sText = GetINIString("List", CStr(nCount), "", FileName) ' Fügt den Eintrag zur Liste hinzu If sText <> "" Then ' Falls der HTML-Dateiname angegeben ist, ' 10 Tabulatorzeichen einfügen, so dass der Dateiname in der ListBox ' selbst nicht sichtbar angezeigt wird. If InStr(sText, "|") > 0 Then sText = Replace(sText, "|", String$(10, vbTab)) .AddItem sText End If Loop Until sText = "" End With End Sub Die Prozedur LoadList wird wiederum beim Laden der Form aufgerufen: Private Sub Form_Load() ... ' Lädt die Datei "Index-tab.txt" in List2 LoadList List2, App.Path & "\Index-tab.txt" End Sub Beim Auswählen eines Eintrags aus der Index-Liste soll die dazugehörige Hilfeseite im WebBrowser-Control angezeigt werden: Private Sub List2_Click() Dim sFile As String With List2 If .ListIndex >= 0 Then ' HTM-Datei ermitteln If InStr(.Text, vbTab) > 0 Then sFile = Mid$(.Text, InStrRev(.Text, vbTab) + 1) Else sFile = .Text & ".htm" End If End If ' Seite anzeigen WebBrowser1.Navigate "file:\\" & App.Path & "\Help\" & sFile ' Seite in die TextBox "Favoriten" eintragen, so dass der ' Anwender diese per Klick auf den CommandButton in die ' Favoritenliste mit aufnehmen kann. Text1.Text = "file:\\" & App.Path & "\Help\" & sFile End With End Sub Favoriten-Liste verwalten Die Favoriten-Liste wird aus der INI-Datei myfav.txt ausgelesen und in der ListBox List1 angezeigt. Hier müssen wir uns jedoch nicht um den HTML-Dateinamen kümmern, da es sich bei den Einträge der Favoritenliste sowieso immer um HTML-Dateien bzw. URLs handelt. Für das Auslesen der Datei benutzen wir wiederum die LoadList-Prozedur, die wir ebenfalls wieder im Form_Load-Ereignis aufrufen. Private Sub Form_Load() ... ' Lädt die Datei "myfav.txt" in List1 LoadList List1, App.Path & "\myfav.txt" End Sub Beim Klick auf einen Eintrag der Favoriten-Liste soll die Hilfeseite bzw. die URL im WebBrowser-Control angezeigt werden: Private Sub List1_Click() ' Bei Klick auf einen Eintrag der Favoritenliste ' wird die entsprechende Web Seite angezeigt If List1.ListIndex >=0 Then WebBrowser1.Navigate (List1.List(List1.ListIndex)) End If End Sub Das Hinzufügen neuer Favoriten-Einträge erfolgt durch Eingabe der "URL" in die TextBox Text1 und anschließendem Klick auf den CommandButton Command1: ' für Favoriten Private Sub Command1_Click() Dim i As Long Dim bExists As Boolean ' Prüfen, ob Eintrag bereits vorhanden bExists = False With List1 For i = 0 To .ListCount - 1 If LCase$(.List(i)) = LCase$(Text1.Text) Then ' Eintrag existiert bereits! bExists = True: Exit For End If Next i ' Nur wenn Eintrag noch nicht existiert... If Not bExists Then ' ...URL der Liste hinzufügen... List1.AddItem Text1.Text ' ... und Speichern der Liste SaveList List1, App.Path & "\myfav.txt" End If End With End Sub ' ListBox-Inhalt in INI-Datei speichern Public Sub SaveList(oListBox As ListBox, ByVal FileName As String) Dim nCount As Long On Error Resume Next ' Löscht die alte Datei um sicher zu sein, ' dass jede extra Information die nicht ' benötigt wird, gelöscht wird Kill FileName With oListBox nCount = 0 If .ListCount > 0 Then ' alle ListBox-Einträge speichern Do nCount = nCount + 1 WriteINIString "List", CStr(nCount), .List(nCount - 1), FileName Loop Until nCount = .ListCount End If End With End Sub So, das war's dann für heute. Sie können das Projekt jetzt starten Beispielprojekt mit zusätzlichen Erweiterungen Selbstverständlich lässt sich das Hilfesystem noch um einige Funktionen erweitern, wie z.B.:
Unser Beispielprojekt, das wir für Sie zum Download bereitgestellt haben, enthält bereits einige dieser Erweiterungen. Download Beispielprojekt: Anmerkungen: Programmidee: Umsetzung: Feedback mit Kritik, Anregungen, Tipps senden Sie per Mail an ArthurW oder posten diese direkt in das vb@rchiv-Diskussionsforum. Dieser Workshop wurde bereits 27.796 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats Dezemeber 2024 Roland Wutzke MultiSort im ListView-Control Dieses Beispiel zeigt, wie sich verschiedene Sortierfunktionen für ein ListView Control realisieren lassen. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
|||||||||||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |