

| Denkfehler in BDE | |
|
Nicht alle Datensätze
werden bei POST sofort auf Platte gespeichert ! |
|
|
Schreibvorgänge in Datenbanken
auf der Festplatte dauern etwas länger als das Schreiben im RAM.
Um Datenbankprogramme schneller wirken zu lassen, hat Borland in der
BDE einen Cache-Puffer vorgeschaltet. Zu speichernde Datensätze
landen zunächst recht schnell in diesem Puffer, später werden
dann unbemerkt im Hintergund die Sätze in aller Ruhe auf Platte
geschrieben. |
|
| Procedure
TForm1.AfterPost(DataSet: TDataset); wobei die Funktion "FlushDBBuffer" im Programm oder besser in einer Unit wiefolgt defniert werden muß: function
FlushDBBuffer(Const Table: TTable); DBIResult; falls nicht schon vorhanden, müssen hierfür
in der USES-Klausel die Units
DB, DBTables, DBITypes, DBIErrs, DBIProcs defniert
werden. |
|
| INI-Datei Cache ? | |
| Auch INI-Datei-Änderungen werden nur verzögert auf Platte geschrieben | |
|
Ähnlich wie bei FlushDBBuffer (s.o.) werden u.U.
Einträge in einer INI-Date zunächst in einem Cache-Puffer
zwischengespeichert. Wird ein Programm im Netzwerk betrieben oder sollen
andere Prozesse sofort auf die Änderungen reagieren, muß
das Schreiben in dei INI-Date mit dem Leeren des Cache-Puffers abgeschlossen
werden: |
|
| INIDatei:=TIniFile.create('c:\test.ini'); Unter Windows XP wird immer mehr von massiven Problemen im Zusammenhang mit TInifile berichtet. Wegen des zusätzlichen Pufferns empfiehlt Borland selbst für alle NT-basierenden Systeme, 2000 oder XP, statt TInifile besser TMemInifile bei gleicher Syntax zu benutzen. |
|
| Win Shutdown | |
| Windows herunterfahren, Neustarten, Benutzer abmelden | |
|
In manchen Anwendungen könnte es notwendig werden, Windows nach Beendigung einer Funktion herunterzufahren, neu zu starten oder auch nur den Benutzer abzumelden und mit der erneuten Benutzeridentifikation fortzufahren... |
|
|
Procedure Shutdown; Procedure Restart; Procedure LogOff; |
|
| Wer bin ich ? | |
| Ermittlung des Names des aktuellen Windows-Users | |
| Vielleicht
ist es erforderlich, den Namen des PC-Benutzers (wie er sich bei Windows
angemeldet hat) zu ermitteln, um daraus Berechtigungen o.Ä abzuleiten.
Folgende Funktion liefert als Rückgabewert den Namen des aktuellen
Windows-Users: |
|
|
uses registry; function
WindowsUser: String; // im Netzwerk, Win2000,
XP function
WindowsUser: String; // unter Windows 9x |
|
| Windows-Version | |
| Welche Windows-Version wird verwendet ? | |
| Um auf die verschiedenen Systemvorgaben reagieren zu können, kann innerhalb eines Programms die aktuell laufende Windows-Version bestimmt werden: | |
|
z.B. als Funktion... function
WinVersion: string; |
|
| XP look & feel | |
| Ein Programm dem Aussehen von Windows XP anpassen | |
| Die Programmierer sind eigentlich schon zu bedauern. Kaum hat man ein Programm lauffähig, bringt Mircosoft ein neues Betriebssystem und das eigene Produkt sieht optisch schon veraltet aus. Erstellt man aber spezielle Komponenten für Windows XP, ist das Programm u.U. unter Windows 9x wieder nicht mehr lauffähig. Was also tun, wenn man ein Programnm für mehrere Betriebssysteme passend anbieten will ? | |
|
Zunächst besorgt man sich ein XP-Manifest als Ressourcen-Datei,
z.B. Am einfachsten bindet man dann die XP-Manifest-Datei in das eigene Programm mit ein. Dies geschieht durch einfache Angabe als Ressourcen-Datei: .... Nun muß man nur dafür Sorge tragen, dass die Datei WinXP.res immer dem Programm im Programmverzeichnis beiliegt. So ist das fertige Programm unter allen Windows-Versionen lauffähig und sieht unter XP aus wie XP, unter Win-2000 entsprechend wie Win-2000.
|
|
| Popup-Menue | |
| Auf welcher Komponente wurde ein Popup-Menue aufgerufen ? | |
| Moderne
Programme benutzen heute Popup-Menues bzw. Kontext-Menues, die über
die rechte Maustaste aufrufbar sind. Dabei kann ein definiertes Popup-Menue
auch mehreren Komponenten zugewiesen werden. Innerhalb der Popup-Prozedur
möchte man nun aber wissen, auf welche dieser Komponenten geklickt
wurde, um das Popup-Menue aufzurufen... |
|
|
Die Realisierung ist sehr einfach, wird jedoch in der Delphi-Dokumentation nicht erwähnt: z.B.: Stringvar := PopupMenu1.PopupComponent.Name; oder if PopupMenu1.PopupComponent=Komponente then... |
|
| Schriftart da ? | |
| Vor dem Ausdruck überprüfen, ob eine gewünschte Schriftart überhaupt installiert ist | |
|
Wird bei einem Ausdruck ein bestimmte Schriftart verwendet
und das Programm auch auf anderen Rechnern weitergegeben, so sollte
man vorab immer abfragen, ob diese Schriftart auf dem System überhaupt
installiert ist... |
|
|
uses Printers; function
Schriftartvorhanden(fontname: String): boolean; |
|
| Bild geladen ? | |
| Enthält eine verwendete Image-Komponente ein geladenes Bild (BMP oder JPG) ? | |
|
Verwendete Bilder werden oft erst während der Laufzeit in eine Image-Komponente geladen, um keinen unnötigen Speicherplatz zu verschwenden. Mit nachfolgender Funktion kann abgefragt werden, ob bereits ein solches Bild geladen wurde und nicht noch einmal geladen werden muss... |
|
| if
(Image1.Picture.Bitmap.Empty) // für
BMP-Dateien and (Image1.Picture.Graphic = nil) // für JPG-Dateien then ShowMessage('Kein Bild!') // 'Kein Bild vorhanden' |
|
| BrowserScrollbars | |
| Die angezeigten Scrollbars von TWebBrwoser ausblenden | |
|
Wer in seinen Programmen die Komponente TWebBrowser
zum Anzeigen von HTML-Dokumenten verwendet, den stören vielleicht
die Scrolleisten. Gerade die Scrollbar am rechten Rand wird standardmäßig
immer angezeigt, auch wenn das Dokument gar nicht so lang ist. |
|
| Nachfolgende
Zeilen schalten die Scrollbars ab. Diese Zeilen dürfen jedoch erst
zur Ausführung kommen, wenn die HTML-Seite vollständig geladen
ist (sonst kommt es zur Schutzverletzung). Deshalb uss dieser Code geeignet
platziert werden, z.B. in der Webbrowser-Standardmethode "DocumentComplete": procedure TFrom1.WebBrowserDocumentComplete(Sender.... ) begin WebBrowser.OleObject.Document.Body.Style.OverflowY:='hidden'; WebBrowser.OleObject.Document.Body.Style.OverflowX:='hidden'; end; |
|

ext. Links
Tipps & Tricks mit Quellcode
"Denkfehler
in BDE" - Nicht alls Datensätze werden bei POST sofort auf
Platte geschrieben
INI-Datei-Cache
? - Auch INI-Datei-Änderung landen nur verzögert auf der
Platte
Windows
Shutdown - Windows herunterfahren, Neustarten, Benutzer
abmelden
Wer
bin ich ? - Ermittlung des aktuellen Windows-Users
Windows-Version
- Welche Windows-version wird verwendet ?
Windows
XP look & feel - Programm an das Aussehen von Windows XP anpassen
Popup-Menue
- Auf welche Komponente wurde geklickt, um Popup-Menu aufzurufen.
Schriftart
installiert ? - Vor Ausdruck überprüfen, ob gewünschte
Schriftart überhaupt möglich ?
Bild
geladen ? - Enthält eine verwendete Image-Komponente ein geladenes
Bild?
Scrollbars
weg - Die Bildlaufleisten bei TWebBrowser ausblenden