WinOpen
WinOpen(alpha1[, int2[, int3]) : int
System-Fenster/Fenster-Objekt laden
Details
- alpha1:
- int2:
- Optionen (optional):
_WinOpenDialog_WinOpenLock_WinOpenEventsOff_WinOpenUnicode
- int3: Druckerausgabe-Objekt (optional)
- Resultat:
handleFenster-Objekt - Siehe: Verwandte Befehle ,
WinDialogRun (),WinClose (),WinSave ()
Mit diesem Befehl wird ein System-Fenster oder ein Fenster -Objekt in den Hauptspeicher geladen, aber noch nicht angezeigt. Mit dem Befehl WinDialogRun () erfolgt die Anzeige auf dem Bildschirm.
Die Funktion gibt den Deskriptor des System-Fenster/ Fenster -Objekts zurück. Konnte das Fenster nicht geladen werden oder besitzt der angemeldete Benutzer keine ausreichende Berechtigung, ist das Ergebnis 0 und der globale Fehlerwert ist auf _rNoRec gesetzt.
Je nach verwendetem Betriebssystem stehen unterschiedlich viele Ressourcen (Benutzer- und GDI-Objekte) zur Darstellung des Fensters zur Verfügung. Nach dem Laden des Fensters werden die verbleibenden Ressourcen überprüft. Stehen weniger als 10% zur Verfügung, wird der Dialog nicht geladen. Die Anweisung gibt 0 als Deskriptor zurück und der globale Fehlerwert wird auf _ErrOutOfMemory gesetzt. Die zur Verfügung stehenden Benutzer- und GDI-Objekte können über den Info -Dialog und die Funktionen ObjectsUserLimit und ObjectsGDILimit ermittelt werden.
Weiterführende Informationen unter Limitationen des Anwendungsprozesses
Laden eines System-Fensters
Je nach Art des System-Fensters wird in (alpha1) eine der Stringkonstanten übergeben. (int2) wird nicht angegeben. Bei den Dialogen "Drucken" und "Druckeinrichtung" muss in (obj3) der Deskriptor eines Druckerausgabe -Objektes übergeben werden.
Folgende System-Fenster (int1) stehen zur Verfügung:
_WinComFileOpenEin Fenster zum Öffnen einer Datei wird geladen._WinComFileSaveEin Fenster zum Speichern einer Datei wird geladen._WinComPathEin Fenster zum Auswählen eines Pfades wird geladen._WinComPrintEin Fenster zum Drucken wird geladen._WinComPrintSetupEin Fenster zum Anpassen der Drucker-Einstellungen wird geladen._WinComFontEin Fenster zum Auswählen der Schriftart wird geladen._WinComOdbcEin Dialog zur Angabe einer ODBC-Datenquelle wird geladen._WinC16InfoDer CONZEPT 16-Info-Dialog wird geladen.
Die System-Fenster geben den Wert 0 zurück, wenn die OK-Schaltfläche gedrückt wurde. Wird das Fenster geschlosen, wird -1 zurückgegeben.
Die Eigenschaften, die bei System-Fenstern gesetzt/ermittelt werden können, sind bei den entsprechenden Konstanten erläutert.
Laden eines Fenster-Objekts
Der Name des Fenster -Objektes wird in (alpha1) und in (int2) die Option _WinOpenDialog angegeben. Nach dem Öffnen eines Objekts ist der Suchpfad automatisch auf dieses Objekt gesetzt. Es werden also keine Namen von zuvor geladenen Objekten gefunden. Der Suchpfad kann mit dem Befehl WinSearchPath () gesetzt werden.
Beispiel 1:
// Fenster-Objekt laden und anzeigen
// Fenster 'Message' in tHdl laden
tHdl # WinOpen('Message', _WinOpenDialog);
if (tHdl > 0)
{
// Fenster anzeigen
tHdl->WinDialogRun();
// Fenster nach Schließen entladen
tHdl->WinClose();
}
Beispiel 2:
// System-Fenster zum Speichern einer Datei aufrufen
// System-Fenster "Datei speichern" in tHdl laden
tHdl # WinOpen(_WinComFileSave);
if (tHdl > 0)
{
// Fenstereigenschaften setzen
tHdl->wpCaption # 'CONZEPT 16 - Save file';
tHdl->wpFlags # _WinComCreatePrompt;
tHdl->wpFileName # 'File.txt';
tHdl->wpPathName # 'D:\TXT'
tHdl->wpFileFilter # 'Resources (*.rsc)| *.rsc | Texts (*.txt) | *.txt';
// Fenster aufrufen
if (tHdl->WinDialogRun() = 0)
{
// Dateispeicherort ermitteln
tSavePathFile # tHdl->wpPathName + '\' + tHdl->wpFileName;
// Datei speichern
...
}
// System-Fenster entladen
tHdl->WinClose();
}
Beispiel 3:
// System-Fenster "Druckeinrichtung" laden und aufrufen
// Druckausgabe-Objekt laden
tPrintDev # PrtDeviceOpen('', _PrtDeviceSystem);
if (tPrintDev > 0)
{
// System-Fenster zur Druckeinrichtung in tHdl laden
tHdl # WinOpen(_WinComPrintSetup, 0, tPrintDev);
if (tHdl > 0)
{
// Fenster zentriert aufrufen
if (tHdl->WinDialogRun(_WinDialogCenterScreen) = _WinIdOk)
{
// Fenster mit OK-Schaltfläche beendet
...
}
// Fenster entladen
tHdl->WinClose();
}
}
Laden eines Fensters zum Bearbeiten
Wird ein Fenster-Objekt mit der Anweisung WinOpen(..., _WinOpenDialog | _WinOpenLock ) geöffnet, kann es verändert und wieder in der Datenbank gespeichert werden. Die Speicherung erfolgt mit der Anweisung WinSave (). Das Objekt kann nur dann geladen und gesperrt werden, wenn es zu diesem Zeitpunkt nicht durch den eigenen oder einen anderen Benutzer geändert wird. Die Sperre bleibt bis zum Schließen des Objekts mit der Anweisung WinClose () erhalten. Wird in dieser Zeit der Dialog im Designer geöffnet erscheint die Meldung "Frame mit Name ... wird bereits editiert."
Ist das Fenster bereits zum Ändern geöffnet, wird von der WinOpen()-Anweisung 0 zurückgegeben und der globale Fehlerwert auf _ErrLocked gesetzt. Besitzt der Benutzer keine Rechte zum Ändern des Fensters, ist der Fehlerwert _ErrRights.
Beim Öffnen zum Ändern wird das Objekt geladen, ohne das Ereignisse ausgeführt werden. Das Objekt kann anschließend auch mit den Anweisungen WinDialogRun () bzw. WinAdd () angezeigt werden, ohne das Ereignisse aufgerufen werden.
Laden eines Fensters ohne Ereignis-Verarbeitung
Wird ein Fenster-Objekt mit der Anweisung WinOpen(..., _WinOpenDialog | _WinOpenEventsOff ) geöffnet, ist die Ereignisverarbeitung des Dialogs deaktiviert. In allen anderen Dialogen werden die Ereignisse weiterhin ausgeführt.
Laden eines Systemfensters mit Unicode-Unterstützung
Wird ein Öffnen- (_WinComFileOpen) bzw. Speichern-Dialog (_WinComFileSave) mit der Option _WinOpenUnicode gestartet, werden die Eigenschaften Caption, FileName, PathName, FileNameExt und FileFilter als UTF8-kodierte Zeichenketten erwartet und zurückgegeben. Zur Umwandlung zwischen UTF8 und CONZEPT 16-Zeichensatz können folgende Makros verwendet werden:
define
{
// Konvertierung von Zeichen: CONZEPT 16-Zeichensatz <-> UTF8
mC16toUtf8(aText) : StrCnv(StrCnv(aText, _StrToUTF8), _StrFromANSI)
mUtf8toC16(aText) : StrCnv(StrCnv(aText, _StrToANSI), _StrFromUTF8)
}
Mögliche Laufzeitfehler:
_ErrStringOverflow: Fenstername (alpha1) länger als40Zeichen