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:
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('...');
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.
| 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
ptarr : Array[0..4] Of TPoint =
((x:0; y:4),
.
.
(x:4; y:4));
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.
| 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;
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'.
| 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:
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 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;
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;
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)>
| 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]
| 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) |
Ü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.
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