In einer Listbox Einträge markieren/auswählen

// nur 1 Eintrag:

ListBox1->ItemIndex = Nummer //Nummer: 0 bis x

// mehrere Einträge:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ListBox1->MultiSelect = true; //wichtig!!
    ListBox1->Items->Clear();
    ListBox1->Items->Add("Eintrag1");
    ListBox1->Items->Add("Eintrag2");
    ListBox1->Items->Add("Eintrag3");
    ListBox1->Selected[0] = true;
    ListBox1->Selected[2] = true;
}

Progressbar im Statusbar anzeigen

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    ProgressBar1->Parent = StatusBar1; //Statusbar, auf dem der Progressbar gezeichnet werden soll
    ProgressBar1->Top = 2;             //Position im Statusbar
    ProgressBar1->Left = 2;
}

Zufallszahlen erzeugen

// 1x den Zufallszahlengenerator initialisieren (anhand der akt. Systemzeit):
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
    Randomize(); //Zufallszahlengenerator initialisieren
}

// danach können mit random(Bereich) Zufallzahlen von 0 bis Bereich-1 erzeugt werden:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    int iZWert = random(100); //Zufallszahl zwischen 0-99 erzeugen
}

Button-Caption der Standarddialoge ändern

void __fastcall TForm1::OpenDialog1Show(TObject *Sender)
{
    // der Öffnen-Knopf hat die Kennung eines OK-Buttons
    HWND hDialog = GetParent(OpenDialog1->Handle);
    HWND button = GetDlgItem(hDialog, ID_OK); //OK-Button

    // neuen Text setzen (nach gutdünken)
    SetWindowText(button, "Löschen");
}

Keyboardevent (Tastendruck) an ein Fenster senden

// Beispiel 1 (Internetexplorer aktualisieren [F5 simulieren]):

HWND hwnd = FindWindow("IEFrame", NULL); //Beispiel IE

if(hwnd)
{
    SetForegroundWindow(hwnd);
    keybd_event(VK_F5, 0, 0, 0);
    keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0);
}

// Beispiel 2 Tastendrücke in einem Memofeld ausgeben:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    Memo1->SetFocus();
    for (int i = 65; i < 91; i++)
    keybd_event(i, 0, 0, NULL);
}

Abschnitte in einem String ersetzen

// im folgenden Beispiel wird durch die Funktion StringReplace
// im String "Das ist ein Satz" jedes Vorkommen von
// "Satz", "SAtz", "saTZ", usw. durch "Test" ersetzt

StringReplace("Das ist ein SATZ", "Satz", "Test", TReplaceFlags() << rfReplaceAll << rfIgnoreCase);

NT-Dienst programmieren

Ein NT-Dienst hat einen entscheidenden Vorteil gegenüber einem im Hintergrund laufenden Programm: Der Dienst verrichtet auch seine Arbeit, wenn kein Benutzer angemeldet ist!

  • Erstellung:
    • DATEI->NEU->SERVICEANWENDUNG
    • Im Fenster oben links ist jetzt SERVICE1 und darunter DEPENDENCIES zu lesen
    • SERVICE1 markieren und im Objektinspektor folgendes editieren:
      • DISPLAYNAME = TestDienst (Name der im Dienstmanager angezeigt wird)
      • NAME = TestDienst (Name des Dienstes, der intern verwendet wird)
      • SERVICESTARTNAME = (muss leer bleiben, Benutzerkonto, welches als Dienststarter fungiert. Wenn leer, dann Systemkonto)
    • Weitere Parameter (nicht unbedingt notwendig):
      • ALLOWPAUSE: Dienst kann pausieren
      • ALLOWSTOP: Dienst kann gestoppt werden
      • DEPENDENCIES: Stringeinträge die beschreiben, daß der Dienst erst gestartet werden darf, wenn andere Dienste gestartet wurden
      • ERRORSEVERITY: wie reagiert der Dienstestarter auf Startfehler
      • LOADGROUP: wird zusammen mit DEPENDENCIES verwendet, teilt Windows die Gruppenzugehörigkeit mit
      • SERVICESTARTNAME: Dienststarter (z.B. Adminlogin) eingeben
      • PASSWORD: Passwort von SERVICESTARTNAME
      • SERVICETYPE: für WindowsNT-Dienste STWIN32
      • STARTTYPE: Startmodus (manuell, Systemstart, etc.)
      • TAG: egal
      • TAGID: egal
      • WAITHINT: Zeit in Millisekunden, bis der Dienst auf eine Anforderung reagiert
  • Beispiel: Dienst öffnet alle 10 Sekunden eine Textdatei und schreibt die aktuelle Zeit hinein
    1. TTimer in die “Dienstform” mit INTERVALL = 10000
    2. #include in die CPP einfügen
    3. In das OnTimer-Ereignis:
    4. FILE *O;
      O=fopen("C:tbeispieldienst.txt","at");
      
      if (O)
      {
          fputs(AnsiString(Now()).c_str(), O);
          fclose (O);
      }
      
    5. Dienst-Programm über das Menü PROJEKT->XXXX ERZEUGEN erstellen
  • Installation:
    • Verknüpfung auf die Dienste-EXE mit /install hinter dem *.exe erstellen. Beim Start wird dann der Dienst automatisch eingerichtet. Zusätzlich kann noch /silent dahinter, dies unterdrückt die Messagebox nach erfolgreicher Serviceinstallation.
  • Deinstallation:
    • Dienst beenden und Verknüpfung mit /uninstall starten.

Verwenden von dynamic casts

void __fastcall TForm1::Label1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
{
    TLabel *pLabel;
    TEdit *pEdit;
    TButton *pButton;

    pLabel = dynamic_cast <TLabel *> (Sender);
    pEdit = dynamic_cast <TEdit *> (Sender);
    pButton = dynamic_cast <TButton *> (Sender);

    if (pLabel)
    {
        Label1->Caption = "Ich bin ein TLabel. Mein Name ist "" + pLabel->Name + """;
    }
    else if (pEdit)
         {
            Label1->Caption = "Ich bin ein TEdit. Mein Name ist "" + pEdit->Name + """;
         }
         else if (pButton)
              {
                Label1->Caption = "Ich bin ein TButton. Mein Name ist "" + pButton->Name + """;
              }
}