WinInfo
Mit diesem Befehl können verschiedene Informationen zu dem übergebenen Objekt (obj) oder zu der Umgebung, in der die Applikation gestartet wurde, ermittelt werden. Zudem können relativ zum angegebenen Objekt, andere Objekte ermittelt werden. Die unterschiedlichen Funktionen werden durch die Übergabe entsprechender Konstanten in (int1) aufgerufen.
Die Funktionen können in folgende Bereiche aufgeteilt werden:
- Navigation durch den Objektbaum
- Objekte nach Typ iterieren
- Ermitteln anderer Objekte
- Informationen über das Objekt
- Informationen über die Umgebung
Navigation durch den Objektbaum
Werden die folgenden Konstanten übergeben, ist die Rückgabe des Befehls immer der Deskriptor eines Objekts. In (obj) kann ein beliebiges Oberflächenobjekt übergeben werden.
-
Das Resultat ist das erste untergeordnete Objekt des Objekts (obj).
-
Das Resultat ist das letzte untergeordnete Objekt des Objekts (obj).
-
Das Resultat ist das nachfolgende Objekt des Objekts (obj).
-
Das Resultat ist das vorhergehende Objekt des Objekts (obj).
-
Das Resultat ist das übergeordnete Objekt des Objekts (obj).
-
Das Resultat ist das Wurzel-Objekt des Objekts (obj).
-
Das Resultat ist das übergeordnete Frame-Objekt des Objekts (obj).
Die Reihenfolge, in der über die Parameter _WinFirst, _WinPrev, _WinNext und _WinLast zugegriffen wird, entspricht der Erstellungsreihenfolge der einzelnen Objekte. Die Intervall-Objekte innerhalb des GanttGraph-Objekts werden vom Betriebssystem nicht in einer Liste verwaltet. Die Reihenfolge beim Lesen der Intervalle kann somit von der Erstellungsreihenfolge abweichen. Bei den Objekten Notebook, RecList und DataList kann alternativ über die Eigenschaft OrderPass die Anzeigereihenfolge ermittelt werden.
In (int3) kann ein Objekt-Typ angegeben werden. Als Werte stehen die bei _WinType beschriebenen Konstanten zur Verfügung. Der Objekt-Typ wird nur in Kombination mit den Optionen _WinFirst, _WinPrev, _WinNext, _WinLast und _WinParent ausgewertet. Es wird das entsprechende Objekt des angegebenen Typs zurückgegeben.
Beispiel:
// Übergeordnetes Notebook-Objekt ermitteln
tObj->WinInfo(_WinParent, 0, _WinTypeNotebook);
Objekte nach Typ iterieren
Werden Objekte nach Typ iteriert, stellt der übergebene Objekttyp dabei nicht immer den exakten Objekttyp dar, sondern eine Objektgruppe.
Beispiel:
for tChild # tParent->WinInfo(_WinFirst, 1, _WinTypeEdit);
loop tChild # tChild->WinInfo(_WinNext, 1, _WinTypeEdit)
while (tChild > 0)
...
Die Schleife ermittelt nicht nur Edit-Objekte vom Typ _WinTypeEdit, sondern auch DateEdit, FloatEdit, TextEdit, etc, da diese zur Objektgruppe der Eingabeobjekte gehören.
Die folgende Schleife ermittelt dagegen nur DateEdit-Objekte, da diese keine eigene Objektgruppe bilden.
for tChild # tParent->WinInfo(_WinFirst, 1, _WinTypeDateEdit);
loop tChild # tChild->WinInfo(_WinNext, 1, _WinTypeDateEdit);
while (tChild > 0)
...
Folgende Objektgruppen existieren:
- Eingabeobjekte (
_WinTypeEdit): Edit, IntEdit, BigIntEdit, FloatEdit, DecimalEdit, TimeEdit, DateEdit, ColorEdit, FontNameEdit, FontSizeEdit, TextEdit - Frame-Objekte (
_WinTypeFrame): Frame, AppFrame, MdiFrame, TrayFrame, Dialog - Schaltflächen (
_WinTypeButton): Button, ColorButton, Checkbox, Radiobutton - Schalter (
_WinTypeCheckBox): Checkbox, Radiobutton - Label-Objekte (
_WinTypeLabel): Label, HyperLink - Toolbar-Objekte (
_WinTypeToolbar): Toolbar, Statusbar - PrintForm-Objekte (
_PrtTypePrintForm): PrintForm, PrintDoc, PrintDocRecord, PrintFormList
Sollen nur Objekte des angegebenen Typs ermittelt werden, muss die Konstante _WinTypeExact mit dem Objekttyp verodert werden:
for tChild # tParent->WinInfo(_WinFirst, 1, _WinTypeEdit | _WinTypeExact);
loop tChild # tChild->WinInfo(_WinNext, 1, _WinTypeEdit | _WinTypeExact);
while (tChild > 0)
...
Die Konstante wird bei den Optionen _WinFirst, _WinLast, _WinNext, _WinPrev und _WinParent ausgewertet und bei allen anderen Optionen ignoriert.
Ermitteln anderer Objekte
Bei diesen Funktionen werden bestimmte Objekte ermittelt. Als Übergabeparameter müssen entweder bestimmte Objekttypen oder 0 übergeben werden. Welche Objekte übergeben werden können, ist bei den Konstanten erläutert.
-
Das Resultat ist das Application-Objekt. In (obj) kann
0oder ein beliebiges Objekt angegeben werden. -
Das Resultat ist das aktive MDIFrame-Objekt des in (obj) übergebenen AppFrame-Objekts.
-
Das Resultat ist ein bestimmtes Unterobjekt des Objekts (obj). Das übergebene Objekt muss von einem bestimmten Typ sein.
-
Das Resultat ist das aktive GroupTile-Objekt des in (obj) übergebenen GroupSplit-Objekts.
-
Das Resultat ist das maximierte GroupTile-Objekt des in (obj) GroupSplit-Objekts.
-
Das Resultat ist das Menü des in (obj) übergebenen Frame bzw. AppFrame-Objekts.
-
Das Resultat ist das Kontextmenü-Objekt des Objekts (obj).
-
Wird in einem RecList- oder DataList-Objekt ein Eintrag editiert, wird mit dieser Konstante das Editier-Objekt zurückgegeben.
-
Das Resultat ist das Vordergrundfenster. Als Objekt (obj) muss
0als Zähler (int2) muss0oder1angegeben werden.
Informationen über das Objekt
In dieser Gruppe von Konstanten werden Informationen über das in (obj) angegebene Objekt zurückgegeben. Bei einigen Konstanten können nur bestimmte Objekttypen übergeben werden. Dies ist bei den Konstanten erläutert.
-
Das Resultat ist die Anzahl der untergeordneten Objekte des Objekts (obj).
-
Es wird die Höhe des Clientbereichs (inklusive Tool- und Windowbars) zurückgegeben. Es können nur Objekte vom Typ Frame, AppFrame oder MdiFrame übergeben werden.
-
Es wird die Breite des Clientbereichs (inklusive Tool- und Windowbars) zurückgegeben. Es können nur Objekte vom Typ Frame, AppFrame oder MdiFrame übergeben werden.
-
Es wird die Höhe des Anzeigebereiches ohne Menü, Tool- und Windowbars zurückgegeben. Bei AppFrame-Objekten entspricht das der Höhe des Bereiches, in dem MdiFrame-Objekte dargestellt werden können. Es können nur Objekte vom Typ Frame bzw. AppFrame übergeben werden.
-
Es wird die Höhe des Anzeigebereiches ohne Menü, Tool- und Windowbars zurückgegeben. Bei AppFrame-Objekten entspricht das der Höhe des Bereiches, in dem MdiFrame-Objekte dargestellt werden können. Es können nur Objekte vom Typ Frame bzw. AppFrame übergeben werden.
-
Das Resultat ist der Typ des Objekts (obj).
-
Das Resultat ist die Taste, mit der das Objekt verlassen wurde.
-
Das Resultat ist die Position des Objekts (obj) innerhalb des übergeordneten Objekts.
-
Das Resultat ist die Position der Datenzelle des Spalten-Objekts (obj) eines DataList-Objekts.
-
Das Resultat ist der Status des Frame/AppFrame/MDIFrame- oder des GroupTile-Objekts (obj).
-
Wird ein Objekt (obj) angegeben, gibt der Befehl zurück, ob es dynamisch erstellt wurde (
1) oder nicht (0). Ein Objekttyp (int3) darf in diesem Fall nicht angegeben werden. Wird als Objekt0und in (int3) ein Objekttyp angegeben, gibt der Befehl zurück, ob der Objekttyp mit WinCreate()erzeugt werden kann. -
Wird als Resultat
1zurückgegeben, unterstützt das Objekt (obj) Unicode-Eigenschaften, bei0nicht. Die betreffenden Eigenschaften sind auf der Seite Unicode-Unterstützung ersichtlich.
Informationen über die Umgebung
Mit diesen Konstanten werden Parameter der Umgebung abgefragt. Außer bei der Ermittlung des Fehlerwertes muss kein Objekt übergeben werden. Anstelle des Deskriptors wird der Wert 0 angegeben.
WinInfo(0, int1[, int2, int3])
-
Das Resultat ist die horizontale Bildschirmauflösung.
-
Das Resultat ist die vertikale Bildschirmauflösung.
-
Das Resultat ist die horizontale Bildschirmauflösung in DPI.
-
Das Resultat ist die vertikale Bildschirmauflösung in DPI.
-
Das Resultat ist die aktuelle Bildschirmfarbtiefe.
-
Das Resultat ist die Aktivität der betriebssystemabhängigen Darstellung.
-
Das Resultat ist
1, wenn Windows im Modus "Hoher Kontrast" läuft, sonst0. -
Das Resultat ist der Windows-Fehlerwert. Der Fehlerwert muss nur nach der Installation zur Darstellung von Office-Dateien (
InstallCtxOffice) abgefragt werden. -
Das Resultat ist die Maustaste, mit der zuletzt ein TreeNode in einem TreeView-Objekt selektiert wurde.
Beispiel 1:
// Alle Objekte eines Fensters ermitteln
@A+
@C+
sub AllObj
(
aStartObj : handle;
)
local
{
tObj : handle;
}
{
if (aStartObj > 0)
{
for tObj # aStartObj->WinInfo(_WinFirst);
loop tObj # tObj->WinInfo(_WinNext);
while (tObj > 0)
{
tObj->AllObj();
... // Verarbeitung des Objekts
}
}
}
main()
local
{
tHdl : handle;
}
{
tHdl # WinOpen('Manager', _WinOpenDialog);
tHdl->AllObj();
tHdl->WinClose();
}
Beispiel 2:
// Alle Einträge eines Menüs ermitteln
// Menü des Fensters ermitteln
tMenu # tFrame->WinInfo(_WinMenu);
// Ersten Eintrag ermitteln
tItem # tMenu->WinInfo(_WinFirst);
// Solange Einträge vorhanden
while (tItem > 0)
{
// Ersten Untereintrag ermitteln
tSubItem # tItem->WinInfo(_WinFirst);
// Solange Untereinträg vorhanden
while (tSubItem > 0)
{
... // Verarbeitung der Untereinträge
// Nächsten Untereintrag ermitteln
tSubItem # tSubItem->WinInfo(_WinNext);
}
// Nächsten Eintrag ermitteln
tItem # tItem->WinInfo(_WinNext);
}
Beispiel 3:
// Bestimmte Objekte eines Gantt-Graphs ermitteln
sub Info
(
aGanttGraph : handle; // Übergebener Gantt-Graph
aObjType : int; // Übergebener Objekt-Typ
)
local
{
tObj : handle; // Interval-Deskriptor
tTemp : int; // Zwischenspeicher
}
{
// Objekt-Typ kein Gantt-Graph-Unterobjekt
if ((aObjType != _WinTypeInterval) and (aObjType != _WinTypeIvlBox) and (aObjType != _WinTypeIvlLine))
// Funktion abbrechen
return;
// Erstes Unterobjekt vom Typ aObjType ermitteln
tObj # aGanttGraph->WinInfo(_WinFirst, 1, aObjType);
// Solange Unterobjekte vom Typ aObjType vorhanden
while (tObj != 0)
{
// Nächstes Unterobjekt vom Typ aObjType ermitteln
tTemp # tObj->WinInfo(_WinNext, 1, aObjType);
... // Verarbeitung des Objekts
tObj # tTemp;
}
}
Der Parameter (int2) wird nur in Kombination mit den Optionen _WinPrev, _WinNext und _WinParent ausgewertet. Mit dem Zähler kann eine Schrittweite übergeben werden.
Beispiel:
// Übernächstes Objekt ermitteln
tObj->WinInfo(_WinNext, 2);
// Großvater-Objekt ermitteln
tObj->WinInfo(_WinParent, 2);
Bei der Angabe von negative Werten in (int2) liefert der Befehl den Wert 0 zurück.
Mögliche Laufzeitfehler:
_ErrHdlInvalid: Oberflächenobjekt (obj) ungültig oder muss0sein._ErrValueInvalid: Bei der Option_WinDynamicwurde sowohl ein Objekt (obj) als auch ein Objekttyp (int3) angegeben. Bei der Option_WinFrameForegroundwurde ein Zähler (int2) <0oder >1angegeben.