Delphi - Wie war das noch

Array Vorbelegen

Type Name1 = Array[1..4,1..10] of Integer;

Const Name2: Name1 = ((1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10));
oder auch


Const Name2 : Array[1..4,1..10] of Integer =
                     ((1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10),
                      (1,2,3,4,5,6,7,8,9,10));

Bitmap erzeugen und bearbeiten

Bitmap erzeugen:

Var Bitmap: TBitmap;

Bitmap := TBitmap.Create;

Die erzeugte Bitmap hat alle Eigenschaften einer TBitmap Komponente.

Bildgröße festlegen:

Bitmap.Width := 100;

Bitmap.Height := 120;

Bitmap entfernen:

Bitmap.Free;

Sollte auf jeden Fall vor dem Programmende gemacht werden, da sonst Leichen im Speicher zurückbleiben.

Bitmap aus einer Datei laden:

Bitmap.Picture.LoadFromFile('...');

Bookmark

Var Mark1: TBookmark;
...
// Aktuelle Position merken
Mark1 := Table1.GetBookmark;
...
// Position in der Tabelle verändern
...
// Alte Position wieder anspringen
Table1.GotoBookmark(Mark1);
...

Werden die Tabellen aus anderen Formularen benutzt, dann muß die Library DB in Uses eingetragen werden.

Bool Typen

Typ False True Bytes
Boolean

= 0

= 1

1

ByteBool

= 0

<> 1

1

WordBool

= 0

<> 1

2

LongBool

= 0

<> 1

4

Definiert in Windows.pas

Bool = LongBool;

Const Array vom Typ TPoint

Const
  ptarr : Array[0..4] Of TPoint =
   ((x:0; y:4),
      .
      .
    (x:4; y:4));

HTML Seite aufrufen

Diese Procedure benötigt die Unit ShellApi für die Funktion ShellExecute.

procedure TForm1.Help1Click(Sender: TObject);
Var s1,s2:String;
begin
  // HTML Dokumentation aufrufen;
  s2 := 'netscape.exe';
  s1 := ExtractFilePath(Application.Exename) + 'Doku\D\Basissystem\Watchdog\WatchDog.html';
  If FileExists(s1) Then Begin
    ShellExecute(Application.Handle,'open',PCHar(s2),PChar('-k ' + s1),nil,SW_ShowNormal);
  End Else Begin
    s1 := 'G:\Edmu\Doku\D\Basissystem\Watchdog\WatchDog.html';
    If FileExists(s1) Then Begin
      ShellExecute(Application.Handle,'open',PCHar(s2),PChar('-k ' + s1),nil,SW_ShowNormal);
    End Else Begin
      sb.Panels[4].Text := l1.TranslateUserMessage('Help file not available');
    End;
  End;
end;

Die Option -k blendet beim Netscape Navigator alle Bedienelemente aus. Die gleiche Option beim Internet Explorer blendet alles aus und der Browser belegt den gesamten Bildschirm, ohne das er sich verkleinern läßt. Er kann nicht beendet werden. Jedenfalls nicht mit legalen Mitteln.

Integer Typen

Typ Bytes Wertebereich Wertebereich
Byte 1 0 .. 28-1 0 .. 255
ShortInt 1 -27 .. 27-1 -128 .. 127
Word 2 0 .. 216-1 0 .. 65535
SmallInt 2 -215 .. 215-1 -32768 .. 32767
Cardinal 4 0 .. 231-1 0 .. 2147483647
Integer 4 -231 .. 231-1 -2147483648 .. 2147483647
LongInt 4 -231 .. 231-1 -2147483648 .. 2147483647
Comp 8 -263 .. 263 -1 -9223372036854775808 .. 9223372036854775807

Definiert in Windows.pas

Short = SmallInt

dWord = Integer;

uInt = Integer;

LongLong = Comp;

uLong = LongInt;

TLargeInteger = Record
  Case Integer of
    0: (LowPart: dWord; HighPart: LongInt=;
    1: (QuadPart: Comp);
  End;

const
  MINCHAR = $80;
  MAXCHAR = 127;
  MINSHORT = $8000;
  MAXSHORT = 32767;
  MINLONG = $80000000;
  MAXLONG = $7FFFFFFF;
  MAXBYTE = 255;
  MAXWORD = 65535;
  MAXDWORD = $FFFFFFFF;

MessageDlg

Die Funktion MessageDlg zeigt in der Mitte des Bildschirms ein Dialogfeld mit einer Meldung an.

function MessageDlg(const Msg: string; AType: TMsgDlgType; AButtons: TMsgDlgButtons; HelpCtx: Longint): Word;

Beschreibung

Mit MessageDlg können Sie ein Meldungsfeld anzeigen und die Antwort des Benutzers ermitteln. Der Parameter Msg enthält die Meldung. Der Parameter AType bestimmt den Typ des eingeblendeten Meldungsfeldes. Der Parameter AButtons bestimmt, welche Schaltflächen das Meldungsfeld enthält. AButtons ist vom Typ TMsgDlgBtns. Da dieser Typ eine Menge repräsentiert, können auch mehrere Schaltflächen angezeigt werden. Der Parameter HelpCtx bestimmt den Hilfebildschirm, der angezeigt wird, wenn der Anwender die Schaltfläche Hilfe anklickt, oder F1 drückt.

MessageDlg liefert den Wert der Schaltfläche zurück, auf die der Benutzer geklickt hat. Der Parameter kann folgende Rückgabewerte enthalten:

Rückgabewerte

mrNone    mrAbort    mrYes
mrOk      mrRetry    mrNo
mrCancel  mrIgnore   mrAll

Der Typ TMsgDlgType definiert die Werte, die den Typ des Meldungsfeldes beschreiben.

Unit

Dialogs

type TMsgDlgType = (mtWarning, mtError, mtInformation, mtConfirmation, mtCustom);

Beschreibung

TMsgDlgType wird von den Funktionen MessageDlg und MessageDlgPos verwendet und definiert die folgenden Werte, die den Typ eines Meldungsfeldes beschreiben:

Wert           Beschreibung
mtWarning      Ein Meldungsfenster mit einem gelben Ausrufezeichen.
mtError        Ein Meldungsfenster mit einem roten Stoppschild.
mtInformation  Ein Meldungsfenster mit einem blauen "i".
mtConfirmation Ein Meldungsfenster mit einem grünen Fragezeichen.
mtCustom       Ein Meldungsfenster ohne Bitmap. Als Fenstertitel wird der Name der Anwendung angezeigt.

Der Typ TMsgDlgButtons definiert die von den Funktionen MessageDlg und MessageDlgPos verwendeten Werte.

Unit

Dialogs

type

TMsgDlgBtn = (mbYes, mbNo, mbOK, mbCancel, mbAbort, mbRetry, mbIgnore, mbAll, mbHelp);

TMsgDlgButtons = set of TMsgDlgBtn;

Beschreibung

TMsgDlgButtons ist eine Menge mit den Werten, die eine Schaltfläche in einem Meldungsfeld annehmen kann. Dieser Typ wird von den Funktionen MessageDlg und MessageDlgPos verwendet. In der folgenden Tabelle sind die verschiedenen Werte aufgeführt:

Wert     Beschreibung 
mbYes    Eine Schaltfläche mit einem grünen Häkchen dem Text 'Ja'.
mbNo     Eine Schaltfläche mit einem durchgestrichenen roten Kreis und dem Text 'Nein'.
mbOK     Eine Schaltfläche mit einem grünen Häkchen und dem Text 'OK'.
mbCancel Eine Schaltfläche mit einem roten X und dem Text 'Abbruch'.
MbHelp   Eine Schaltfläche mit einem blaugrünen Fragezeichen und dem Text 'Hilfe'.
mbAbort  Eine Schaltfläche mit einem roten Häkchen und dem Text 'Abbruch'.
mbRetry  Eine Schaltfläche mit zwei grünen kreisförmigen Pfeilen und dem Text 'Wiederholen'.
mbIgnore Eine Schaltfläche mit einem grünen Männchen und dem Text 'Ignorieren'.
mbAll    Eine Schaltfläche mit einem grünen Doppelhäkchen und dem Text 'Alles'.

Real Typen

Typ Bytes Wertebereich Signifikante Stellen
Single

4

1.5 x 10-45 .. 3.4 x 1038

8

Real

6

2.9 x 10-39 .. 1.7 x 1038

11-12

Double

8

5.0 x 10-324 .. 1.7 x 10308

15-16

Currency

8

-922337203685477.5808.. 922337203685477.5807

19-20

Extended

10

3.4 x 10-4932 .. 1.1 x 104932

19-20

Einige Realzahlen vom Typ Single

00 00 80 3F 1.0
00 00 C0 3F 1.5
00 00 00 40 2.0
B2 B3 49 40 Pi=3.141592654
00 00 20 41 10.0
00 00 40 41 12.0
00 00 C8 42 100.0
00 00 F6 42 123.0
00 40 9A 44 1234.0

String Liste erzeugen und bearbeiten

String Liste erzeugen:
Var StrLst: TStrings;
StrLst := TStringList.Create;

StringListe entfernen:
StrLst.Free;
Sollte auf jeden Fall vor dem Programmende gemacht werden, da sonst Leichen im Speicher zurückbleiben.

Eintrag hinzufügen:
StrLst.Add('...');

Eintrag entfernen:
StrLst.Delete(y);

Eintrag einfügen:
StrLst.Insert(y,'...');
Der String steht an der y-Position.

Eintrag verschieben:
StrLst.Move(y-von,y-nach);

Eintrag in der Liste suchen:
i := StrLst.IndexOf('...');

Einträge alle löschen:
StrList.Clear;

Die Definition des Typs TStrings liegt in 'Classes'.

Task erzeugen

Task einrichten:

type
  TForm2 = class(TForm)
    ...
  private
    ...
  public
    RcvTask: TThread;
    ...
  end;

Starten der Task:

  // Task starten

  RcvTask := TRcvTask.Create(False);

  RcvTask.FreeOnTerminate := true;

true bedeutet, das sich die Task nach Beendigung selbst aus dem Speicher entfernt.

Die Task kann angehalten werden

  RcvTask.Suspend;

Die Task kann weiterarbeiten

  RcvTask.Resume;

Die Task wird beendet. Dazu muß die Task auf diesen Befehl reagieren können.

   RcvTask.Terminate;

Typisches Taskprogramm:

procedure TRcvTask.Execute;
begin
  // Initialisierung oder ähnliches
  Repeat
    // Ausführbarer Code
  Until Terminated;
  // Deinitialisierung oder ähnliches
end;

TImageList

Anzahl der Bilder:

TImageList1.Count;

Größe aller Bilder:

TImageList1.Height := 100;

TImageList1.Width := 100;

Wird die Größe geändert, dann wird die ganze Liste gelöscht.

Alle Bilder haben die gleiche Größe.

Zuweisung zu einem TImage Fenster:

TImageList1.GetBitmap(Nummer,Image1.Picture.Bitmap);

Image1.Refresh;

Liegt 'Nummer' außerhalb der vorhandenen Bilder, dann wird ein leeres Bild an Image1 übergeben. Achtung, wenn TImage ein neues Bild zugewiesen wird, dann wird das alte nicht gelöscht, sondern sie überlagern sich. Soll das alte Bild vorher verschwinden, dann:

Image1.Picture.Bitmap := nil;

Procedure ShowPicture(Number:Integer);
Begin
  Image1.Picture.Bitmap := nil;
  ImageList1.GetBitmap(Number,Image1.Picture.Bitmap);
  Image1.Repaint;
End;


Function TForm1.AddImageFromFile(iList:TImageList;iFile:String):Boolean;
Var TempImage: TImage;
begin
  Result := true;
  TempImage := TImage.Create(Self);
  TempImage.AutoSize := true;
  Try
    Try
      If FileExists(iFile) Then Begin
        TempImage.Picture.LoadFromFile(iFile);
        ImageList1.Add(TempImage.Picture.Bitmap,nil);
      End Else Result := false;
    Except
      On E: EInvalidGraphic do Result := false;
    End;
  Finally
    TempImage.Free;
  End;
End;

TListBox

Anzahl der Zeilen:

ListBox1.Items.Count;

Position der markierten Zeile (0..Items.Count-1):

ListBox1.ItemIndex;

Schreiben:

Lesen:

Anzahl der markierten Zeilen:

ListBox1.SelCount;

Angabe, ob eine Zeile markiert ist;

ListBox1.Selected[y];

Die Zeile kann nur bei MultiSelect markiert werden. sonst gibt es eine Fehlermeldung:

<Der Index der Liste überschreitet das Maximum (y)>

TStringGrid

0,0 1,0 2,0
0,1    
0,2   x,y

x,y = Col,Row = Position der aktuellen Zelle

String einer Zelle lesen oder schreiben:

.Cells[x,y] := '...';

.Cols[x][y] := '...';

.Rows[y][x] := '...';

Spaltenbreite: Zeilenhöhe:

.ColWidths[x] := 100; .RowHeights[y] := 20;

Anzahl Spalten: Anzahl Zeilen:

.ColCount := 10; .RowCount := 10;

Alle Strings einer Spalte: Alle Strings einer Zeile:

.Cols[x] x=0..ColCount-1 .Rows[y] y=0..RowCount-1

Alle Spalteninhalte in eine TListBox schreiben:

ListBox1.Items := .Cols[x]

Alle Zeileninhalte in eine TListBox schreiben:

ListBox1.Items := .Rows[y]

Versions Box

Projektoptionen Datei Versionsinfo
Firmenname Firmenname
Dateiinformationen Beschreibung (Header)
Dateiversion Dateiversion (Header)
Interner Name Interner Name
Legal Copyright CopyRight (Header)
Legal Trademark Marken
Original Dateiname Original Dateiname
Produktname Produktname
Produktversion Produkversion
Bemerkung Kommentare
Sprache (Automatisch)

Zeitmessung 1

Über diese Funktionen kann eine Zeitmessung bis in Mikro-Sekunden Bereich durchgeführt werden.

type
  TLargeInteger = record
    case Integer of
    0: (LowPart: DWORD; HighPart: Longint);
    1: (QuadPart: LONGLONG);
  end;
Die Typendefinition liegt Windows.pas

Var c,t1,t2: TLargeInteger;

  // Frequenz des internen Counters holen
  QueryPerformanceFrequency(c);

  QueryPerformanceCounter(t1);
  ...
  QueryPerformanceCounter(t2);
  t1.QuadPart := t2.QuadPart - t1.QuadPart;
  Edit1.Text := IntToHex(t1.HighPart,8)+IntToHex(t1.LowPart,8);

Für den Typ TLargeInteger gibt es keine Ausgabemöglichkeit.

Ein Alternative währe die Zuweisung auf den Typ Comp, aber für diesen Typ gibt es auch keine Ausgabemöglichkeit.

Es kann aber ganz gut mit dem Typ Extended gearbeitet werden.

Var t0,t1,t2: TLargeInteger;
    r0,r1,r2: Extended;

  // Initialisierung
  QueryPerformanceFrequency(t0);
  r0 := t0.QuadPart;

  QueryPerformanceCounter(t1);
  Sleep(2000);
  QueryPerformanceCounter(t2);
  r1 := t1.QuadPart;
  r2 := t2.QuadPart;
  Edit1.Text := FloatToStr((r2-r1)/r0);

Ergebnis ist 2.00074674274335 Sekunden.

Die Ausgabe erfolgt in Sekunden mit vielen Nachkommastellen.

Zeitmessung 2

Die Funktion GetTickCount liefert die Anzahl Millisekunden, seit Windows gestartet wurde.

Var t0,t1:LongInt;

  t0 := GetTickCount;
  Sleep(2000);
  t1 := GetTickCount;
  Edit1.Text := FloatToStr((t1-t0)/1000);

Ergebnis: 2.002