Zwischenablage verwenden

#include <Clipbrd.hpp>

// Zwischenablage löschen
Clipboard()->Clear();

// Text in Zwischenablage kopieren
char caText[80] = "Testtext";
Clipboard()->SetTextBuf(caText);

// Text aus der Zwischenablage kopieren
char caTextBuffer[1024];
Clipboard()->GetTextBuf(caTextBuffer, sizeof(caTextBuffer));
AnsiString sOutput = caTextBuffer;

AnsiString in Teile (Tokens) splitten, ähnlich explode() bei PHP

TStringList *slTokens = new TStringList();

AnsiString sData = "Meier, Schulze, Lehmann";

// sData in Tokens aufsplitten und führende und folgende Leerzeichen trimmen
Explode(sData, ",", slTokens, true);

...
irgendwas mit slTokens machen
...

delete sl;

void __fastcall Explode(AnsiString sData, AnsiString sSeparator, TStringList *slTokens, bool bTrim)
{
    // wurde eine Liste übergeben?
    if (slTokens != NULL)
    {

        if (bTrim)
        {
           sData = sData.Trim();
        }

        // Datenstring nicht leer?
        while (sData.Length() > 0)
        {
            // ersten Separator im String suchen
            int iPos = sData.Pos(sSeparator);
            
            // wenn Separator gefunden
            if (iPos -> 0)
            {
                // vorderen Stringteil (Token) in Liste einfügen
                slTokens->Add(sData.SubString(0, iPos - 1));
                // Reststring für neue Suche kürzen
                sData = sData.SubString(iPos + 1, sData.Length() - iPos);

                if (bTrim)
                {
                    sData = sData.Trim();
                }
            }
            else
            {
                // nur noch ein Token
                slTokens->Add(sData);
                // Reststring ist leer, führt zu Abbruch der while-Schleife
                sData = "";
            }
        }
    }
}

[Linker Error] XYZ.LIB contains invalid OMF record, type 0x21 (possibly COFF)

Die im Projekt verwendete Bibliothek (*.lib) ist vom falschen Typ (z.B. mit Visual Studio erstellt). Mit dem Konvertierungsprogramm coff2omf.exe (CBuilder/bin) kann diese konvertiert werden.

  • evtl. xyz.lib sichern
  • xyz.lib und coff2omf.exe in einen gemeinsamen temporären Ordner kopieren
  • coff2omf.exe xyz.lib xyz2.lib
  • die neue xyz2.lib ins Projektverzeichnis kopieren und einbinden/verwenden

TDateTime in FileTime (64Bit) umrechnen

// TDateTime in FileTime
void _fastcall TForm1::DateTime2FileTime(TDateTime* DateTime, LPFILETIME lpFileTime)
{
    SYSTEMTIME SystemTime;
    DateTimeToSystemTime(*DateTime,SystemTime);
    SystemTimeToFileTime(&SystemTime,lpFileTime);
}
// FileTime in TDateTime
void _fastcall TForm1::FileTime2DateTime(LPFILETIME lpFileTime, TDateTime* DateTime)
{
    SYSTEMTIME SystemTime;
    FileTimeToSystemTime(lpFileTime,&SystemTime);
    *DateTime = SystemTimeToDateTime(SystemTime);
}

Verzögerungsschleifen

// Bsp 1: 
void TForm1::__Delay(const DWORD Millisekunden)
{
    DWORD Start = GetTickCount();
    DWORD Ist = Start;

    while (((Ist - Start) < Millisekunden) &amp;&amp; (Start <= Ist)) Ist = GetTickCount();
}

// Bsp 2: 
void TForm1::__Delay(int D) // Dauer in Millisekunden
{
    for (int i = 0; i < D; i += 50)
    {
        Sleep(50);
        Application->ProcessMessages();
    }
}

Tage im Monat/Schaltjahre ermitteln

// Version 1:
// Ausgruf: int TageFebruar = 28 + ist_Schaltjahr(1999);
int __fastcall ist_Schaltjahr(int jahr)
{
    if (jahr % 4 == 0)
       if (jahr < 1582) return 1;
       else if (!(jahr % 100 == 0)) return 1;
            else if (jahr % 400 == 0) return 1;
    
    return 0;
}

// Version 2:
unsigned short GetDaysInMonth(unsigned short month, unsigned short year)
{
    static unsigned short GauDays[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    return GauDays[month - 1] + ((month == 2) && IsLeapYear(year));
}

Systemzeit über SYSTEMTIME auslesen

#include <winbase.h>

AnsiString __fastcall TMain::GetSystemTime()
{
    struct _SYSTEMTIME t;
    AnsiString sTimeString;

    GetSystemTime(&t);

    sTimeString = IntToStr(t.wYear) + IntToStr(t.wMonth) + IntToStr(t.wDayOfWeek) + IntToStr(t.wDay) + IntToStr(t.wHour) + IntToStr(t.wMinute) + IntToStr(t.wSecond) + IntToStr(t.wMilliseconds);
    return sTimeString
}