Komponenten einer Form Speichern und Laden (binär)

// Im Beispiel wird gezeigt, wie man ein TPanel mit einem daraufliegenden TEdit in
// eine Datei (binär) speichert und diese später wieder laden kann.
// Auf der Form befinden sich 2 Buttons (Laden/Speichern) und 1 Panel.
// Das TEdit wird zur Laufzeit erstellt.
// Zum Speichern/Laden wird ein TFilestream und dessen Funktionen
// WriteComponent() und ReadComponent() benutzt.
// Die geladenen Komponenten müssen noch mit RegisterClass(__classid(Typ)) registriert werden.
// Testweise kann etwas in das TEdit geschrieben werden, dieser Text wird dann mit gespeichert.

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    TEdit *e = new TEdit(Panel1); // Editfeld erzeugen, Owner wird das Panel, das ist
    e->Parent = Panel1;           // wichtig, damit das TEdit automatisch mit gespeichert wird.
}
// speichern
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // Filestream erzeugen, in dem die Komponenten gespeichert werden
    TFileStream *fs = new TFileStream("Test.dat", fmCreate);
    fs->WriteComponent(Panel1);
    delete fs;

    // Panel testweise entfernen
    delete Panel1;
}
// laden
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    // Filestream erzeugen, in dem die Komponenten geladen werden
    TFileStream *fs = new TFileStream("Test.dat", fmOpenRead);
    RegisterClass(__classid(TPanel)); // TPanel registrieren
    RegisterClass(__classid(TEdit)); // TEdit registrieren

    TComponent* comp = fs->ReadComponent(NULL);
    ((TControl*)comp)->Parent = this;
    delete fs;
}

Schriftart zur Laufzeit laden/entladen

// Schrift laden:

AddFontResource("arial.ttf");
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

// Schrift verwenden:

TestLabel->Font->Name = "Arial";
TestLabel->Font->Size = 10;
TestLabel->Caption = "Arial font test";

// Schrift entfernen:

RemoveFontResource("arial.ttf");
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);

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);