Noch
is die Anzahl der Eintraege nicht unbedingt berauschend, aber ich
werde mir die aller groesste Muehe geben, dass sich dies so schnell
wie moeglich aendert.
Wer
sich aktiv an der Gestalung dieser Seite beteiligen will, kann mir
gerne Anregungen aber auch Kritik und Erweiterungen per Mail
zukommen lassen, oder auch einen Link ueber die unten aufgefuehrten Eingabefelder hinzufuegen.
Will man eine Anwendung schreiben, die fuer die ganze Laufzeit ein Icon bleiben soll, muss man die Fensterbotschaft "WM_QUERYOPEN" abfangen. Dazu muss im "Private"- Abschnitt folgende Routine deklariert werden:
Fenster darf nicht minimiert werden
Will man verhindern, dass
ein Anwender ein Fenster minimiert, oder die Anwendung ueber eine
Verknuepfung minimiert startet, kann man das mit sehr geringem
Aufwand unterbinden.
Zuerst deklariert man im
Private Abschnitt des Formulares eine Routine, die auf dieses
Ereignis reagiert:
Die meisten Fenster
benoetigen eine Mindestgroesse, die nicht unterschritten werden darf.
Ebenso kann es sinnvoll sein, deren maximalgroesse einzuschraenken.
Anstatt nun immer im Ereignis "OnResize" die Eigenschaften
"Width" und "Height" zu ueberpruefen und
gegebenenfalls anzupassen, ist die folgende Methode sehr viel eleganter.
Immer wenn ein Fenster
vom Benutzer vergroessert oder verkleinert wird, wird die
Windows-Meldung "WM_GETMINMAXINFO" gesendet. Faengt man
diese Meldung ab und setzt die minimalen und maximalen Werte auf die
gewuenschte Groesse, kann der Benutzer zur Laufzeit, das Fenster
weder verkleinern noch vergroessern.
Zunaechst wird im
Abschnitt "Private" der Fenster-Typendeklaration eine
Routine deklariert, die auf dieses Ereignis reagiert:
Fenster ohne Titelzeile verschieben
Waehrend man sich evtl.
mit dem OnMouseMove Ereignis einen "Wolf" Programmiert kann
man sich sehr viel Arbeit sparen, wenn man eine kurze Methode
schreibt, die auf das Windows Ereignis WM_NCHITTEST reagiert.
Zunaechst wird im
"Private" Abschitt die Methode deklariert:
In manchen Faellen kann
es durchaus sinnvoll sein, automatisch in das naechste Feld zu
wechseln, ohne dass der Benutzer extra die TAB-Taste dafuer bemuehen
muss. Oder der Programmierer will dem Anwender die Moeglichkeit
geben, mit einer anderen Taste als mit der TAB-Taste von Feld zu Feld
springen zu koennen.
Dies wird durch einen
Aufruf von PostMessage erreicht.
Listfelder mit horizontaler Laufleiste
Normalerweise haben
Listenfelder (TListBox) nur vertikale Bildlaufleisten - und diese
auch nur, wenn sich nicht alle Eintraege anzeigen lassen. Will man
jedoch auch horizontale Laufleisten haben, so muss man die
API-Funktion "SendMessage" mit diesem Wunsch benuehen. Dazu
muss man sich ueberlegen, wie breit der Eintrag maximal werden kann
(in Pixeln!). Im folgenden Beispiel wird davon ausgegangen, dass die
Maximalbreite der Eintraege bei 300 Pixeln liegt, dann lautet der
Aufruf von "SendMessage"
Aktuelle Zeile und Spalte in Memos
Durch zwei Aufrufe der
API-Funktion "SendMessage" erfaehrt man die aktuelle
Position des Cursors in Memo- oder RichEditfeldern. Im folgenden
Beispiel werden die zwei Aufrufe im OnKeyDown-Ereignis ausgefuert und
die Angabe von Spalte und Zeile in einer StatusBar angezeigt.
Cursorposition in den Sichtbaren Bereich scrollen
Wie koennte es auch sein?
auch hierfuer benoetigt man einen Aufruf von SendMessage. Wurde die
Position des Cursors in einem Memo oder RichEdit vom Programm
manipuliert, kann diese durch folgenden aufruf von SendMessage in den
Sichtbaren Bereich gescrollt werden.
SendMessage
(Memo1.Handle, EM_SCROLLCARET, 0, 0);
Das war es dann auch schon...
Zum Seitenanfang
Anzeige beliebiger Zeilen in Memos
Durch einen Aufruf von
SendMessage kann die Position in Memo und Richedit Feldern auf ein
beliebigen Wert gesetzt werden. Normalerweise wird beim ersten
Anzeigen eines solchen Feldes ja immer die erste Zeile angezeit.
SendMessage(RichEdit1.Handle,
EM_LINESCROLL, 0, RichEdit1.Lines.Count - 1);
Die letzte Zeile eines
Richedit Feldes wird mit dem obigen Aufruf angezeigt.
Zum Seitenanfang
Mit Hilfe der
API-Funktion SendMessage, kann der linke bzw. rechte Rand in
Memofeldern gesetzt werden. In den folgenden Zeilen werden die beiden
API-Aufrufe die benoetigt werden gezeit. Im Beispiel wird ein linker
Rand von 10 Pixel erzeugt.
Zusätzliche
Variable: Rect: TRect;
Wieso sollten den alle
Fenster immer eckig sein ? Die folgenden Zeilen zeigen, wie mit Hilfe
der WIN32API auch andere Formen moeglich sind.
Ich verwende hier noch
die Variable rHandle: THandle.
Delphi 1
In Delphi 1 genügt
es noch die Variable hPrevInst auf 0 abzufragen, enthaelt die
Variable den Wert 0 dann wurde das Programm noch nicht gestartet.
ab Delphi 2
Ab der Version 2 von
Delphi ist dies nicht grundlegend schwieriger geworden, jedoch sind
einige Programmzeilen mehr erforderlich um zum gewuenschten Ziel zu gelangen.
Delphi-Fundgrube (Simon Reinhardt)
Delphi-Komponenten (Simon Reinhardt)
-
ANZEIGE - Clevere Online-Werbung durch ADbeamer Banneraustausch