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

Zuweisungsoperator

struct TMyItem
{
    double dValue;
    bool bOk;

    TMyItem()
    {
        dValue = 0.f;
        bOk = false;
    };

    // Zuweisungsoperator
    TMyItem &operator = (const TMyItem &CopyItem)
    {
              dValue = CopyItem.dValue;
              bOk = CopyItem.bOk;

              return *this;
    };
};

Programmstartfenster (Splashscreen) anzeigen

  1. in ein bestehendes Projekt eine neue Form einfügen (BorderStyle = bsNone, FormStyle = fsStayOnTop, Position = poScreenCenter, Name = Splashform)
  2. Einen Timer auf die Form plazieren (Interval = 3000)
  3. im OnTimer-Ereignis folgendes eintragen:
  4. void __fastcall TSplashform::FormClose(TObject *Sender, TCloseAction &Action) 
    { 
        Action = caFree;
    }
    
  5. Beliebige Elemente auf der Splashform plazieren
  6. im Projekt-Quellcode (Projekt -> Quelltext anzeigen) folgende Änderungen vornehmen:
  7. #include "Splashheader.h"
    
    ...
    
    try 
    {
        Application->Initialize();
        Splashform = new TSplashform(Application);
        Splashform->Show();
        Splashform->Update();
        Application->CreateForm(__classid(TForm1), &Form1);
        // Hier kann noch mehr stehen (z.b. Initialisierungen anderer Forms)
        // ...
        Application->Run();
    }
    

Minimieren-Event der Anwendung abfangen

// *.h:

private:
    void __fastcall Min(TObject *Sender); // Funktion, die beim Minimieren aufgerufen wird

// *.cpp:

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) 
{ 
    Application->OnMinimize = Min;
}

void __fastcall TForm1::Min(TObject *Sender) 
{
    Application->Restore(); // Application wir wieder hergestellt :)
}

Exceptions behandeln

try
{
    // irgendwas, was eine Exception auslösen könnte
}
catch ( EDatabaseError &E ) // z.B.: wenn eine Exception der Klasse "EDatabaseError" abgefanngen werden soll
{
    ShowMessage(E.Message); // Exception-Text ausgeben
}
__finally // optional
{
    // etwas, was auf jeden Fall stattfinden soll
}

Bits maskieren

// Bsp. für das Testen des 8. Bits einer Variable:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    BYTE TestByte;
    BYTE AusgabeByte;

    // bisschen was binär zaubern :)
    asm
    {
        mov TestByte, 00010101b;
    }

    AusgabeByte = TestByte & 000000001;

    //   00010101 (Testbyte)
    // + 00000001 (Prüf-Bitmaske)
    // ----------
    //   00000001 (Ergebnis -> 8. Bit gesetzt)

    if (AusgabeByte != 0)
    {
        ShowMessage("Gesetzt");

        // Falls AusgabeByte == 00000001, also != 0
        // Bit war in TestByte gesetzt
    }
    else
    {
        ShowMessage("Nicht gesetzt");
        // Falls AusgabeByte == 00000000, also == 0
        // Bit war in TestByte nicht gesetzt
    }
}