CHM-Datei im Quellcode aufrufen

#include "HtmlHelp.h"

...

// Typdeklaration für die HTML-Help Funktion
typedef HWND (__stdcall *FPHH) (HWND, LPCSTR, UINT, DWORD);
// Objekt anlegen
FPHH htmlHelp;
// HTMLHilfe-DLL Laden
HINSTANCE inst = LoadLibrary( "HHCTRL.OCX" );
// Funktion "HtmlHelpA" suchen und zuweisen
( FARPROC& ) htmlHelp = GetProcAddress( inst, "HtmlHelpA" );

// Contents anzeigen:
htmlHelp(0, "hilfe.chm", HH_DISPLAY_TOC, NULL );

// Index anzeigen:
htmlHelp(0, "hilfe.chm", HH_DISPLAY_INDEX, NULL );

// bestimmte Topic öffnen Version 1
htmlHelp(0, "hilfe.chm::/HTMLPfad_zur_HTMLDateiDatei.htm", HH_DISPLAY_TOPIC, 0);

// bestimmte Topic öffnen Version 2
htmlHelp(0, "hilfe.chm", HH_HELP_CONTEXT, 1040); // 1040 ist die Topic-ID

// "Suchen"-Register öffnen:
tagHH_FTS_QUERY q;

q.cbStruct = sizeof(q);
q.fStemmedSearch = 0;
q.fTitleOnly = 0;
q.fUniCodeStrings = 0;
q.iProximity = 0;
q.pszSearchQuery = "culture";
q.pszWindow = "";
q.fExecute = 1;

htmlHelp(0, "hilfe.chm", HH_DISPLAY_SEARCH, ( DWORD )&q );

Fehlerbehandlung auf der Systemebene (z.B. LoadLibrary, GetProcAddress)

void __fastcall ErrorHandling(HWND hwnd, String Caption)
{
    DWORD lErr = GetLastError();

    if (lErr != ERROR_SUCCESS)
    {
        LPVOID lpMsgBuf;
        FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, lErr, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);

        MessageBox(hwnd, (LPCTSTR)lpMsgBuf, Caption.c_str(), MB_OK |MB_ICONERROR );

        LocalFree(lpMsgBuf);
    }

    SetLastError(0);
}

Host-IP auslesen

void GetIP(char* pszIP) 
{ 
    struct hostent* h; 
    WSADATA wsaData; 
    UCHAR ucAddress[4]; 
    CHAR szHostName[MAX_PATH]; 
    int x; 

    WSAStartup(MAKEWORD(1, 1), &wsaData); 
    if (SOCKET_ERROR != gethostname(szHostName, NUM_ELEMENTS(szHostName)))
    {
        if (NULL != (h = gethostbyname(szHostName)))
        {
            for(x = 0; (h->h_addr_list[x]); x++)
            {
                ucAddress[0] = h->h_addr_list[x][0];
                ucAddress[1] = h->h_addr_list[x][1];
                ucAddress[2] = h->h_addr_list[x][2];
                ucAddress[3] = h->h_addr_list[x][3];
                wsprintf(IP_ADRESSE, "%d.%d.%d.%d", ucAddress[0], ucAddress[1], ucAddress[2], ucAddress[3]);
            }
        }
    }

    WSACleanup(); 
} 

CheckBox mehrzeilig

// Form und Größe der Checkbox entsprechend anpassen!
long int dwStyle;
dwStyle = GetWindowLong(CheckBox1->Handle, GWL_STYLE)|(BS_MULTILINE|BS_VCENTER);
SetWindowLong(CheckBox1->Handle, GWL_STYLE, dwStyle);

Cursortasten und TAB auf einer Form abfangen

// *.h

private:
void __fastcall CMDialogKey(TWMKey &AMsg);

protected:
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(CM_DIALOGKEY, TWMKey, CMDialogKey)
END_MESSAGE_MAP(TForm)

// *.cpp
void __fastcall TForm1::CMDialogKey(TWMKey &AMsg)
{
    TForm::Dispatch(&AMsg);
    switch(AMsg.CharCode)
    {
        case VK_DOWN : ShowMessage("VK_DOWN");break;
        case VK_UP : ShowMessage("VK_UP");break;
        case VK_TAB : ShowMessage("VK_TAB");break;
    }
}

Ein 4D Array definieren

  • Bei beim Borland C++ Builder kann es vorkommen, dass der Linker bei einer Array-Definition abbricht
  • double test [256][256][64][2]; // verursacht "[Linker Fehler] Fatal: Access violation. Link terminated."
    
  • stattdessen kann man folgendes verwenden
  • typedef int D4_ARRAY[256][256][64][2];
    
    D4_ARRAY *array = (D4_ARRAY *)new int*[256 * 256 * 64 * 2];
    
    (*array)[0][0][0][0] = 0; // == ((int *)array)[0] = 0;
    (*array)[0][0][0][1] = 1; // == ((int *)array)[1] = 1;
    (*array)[0][0][1][0] = 2; // == ((int *)array)[2] = 2;
    (*array)[0][0][1][1] = 3; // == ((int *)array)[3] = 3;
    (*array)[0][0][2][0] = 4; // == ((int *)array)[4] = 4;
    
    usw.
    
    // Aufruf
    ShowMessage(((int *)array)[2]);
    ShowMessage(((int *)array)[3]);
    

Hilfe (*.hlp) in ein Borland C++ Builder Projekt einbinden

  • In den Projektoptionen (BCB->Projekt->Optionen->Anwendung->Hilfedatei) dem BCB die Hilfedatei bekanntmachen
  • alternativ kann auch im Quellcode der Anwendung ein Helpfile zugewiesen werden
  • Application->HelpFile = "Hilfedateiname.hlp";
    
  • Um eine Hilfeseite anzuzeigen muß der entsprechende Helpcontext angegeben werden
  • Application->HelpCommand(HELP_CONTENTS, 0);