Erfolg! Und eine weitere Frage... [ERLEDIGT]
Moderator: Moderatoren
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Erfolg! Und eine weitere Frage... [ERLEDIGT]
Erstmal ein riesen Dankeschön für Eure Hilfe - unsere interne (ehemalige Clipper 5.3) EDV-Anwendung ist nun mit Xbase++ (Textmodus) und ADS im Betrieb.
Es kommen immernoch Inkompatibilitäten zum Vorschein aber die in der letzten Zeit aufgetretene Probleme sind lösbar und die Benutzer sind halbwegs zufrieden, insbesondere was die Geschwindigkeit betrifft - nochmal einen besonderen Dank an olaf870!
Nun zur nächsten Frage - ist es in einer Textmodus-Anwendung irgendwie möglich, beim Ereignis "Fenster schließen" eine Funktion auszuführen? Zum Beispiel wenn der Benutzer den Windows "X-Knopf" oben rechts im Fenster clickt. Ich würde gern die Datenbankverbindung ordentlich kappen in diesem Fall anstatt auf das ADS-Timeout zu warten. Ist ja aber nicht so ganz schlimm wenn es nicht geht.
Viele Grüße,
David
Es kommen immernoch Inkompatibilitäten zum Vorschein aber die in der letzten Zeit aufgetretene Probleme sind lösbar und die Benutzer sind halbwegs zufrieden, insbesondere was die Geschwindigkeit betrifft - nochmal einen besonderen Dank an olaf870!
Nun zur nächsten Frage - ist es in einer Textmodus-Anwendung irgendwie möglich, beim Ereignis "Fenster schließen" eine Funktion auszuführen? Zum Beispiel wenn der Benutzer den Windows "X-Knopf" oben rechts im Fenster clickt. Ich würde gern die Datenbankverbindung ordentlich kappen in diesem Fall anstatt auf das ADS-Timeout zu warten. Ist ja aber nicht so ganz schlimm wenn es nicht geht.
Viele Grüße,
David
Zuletzt geändert von dtmackenzie am Di, 23. Jun 2009 14:34, insgesamt 2-mal geändert.
Viele Grüße,
David
David
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weiter Frage ("Close" abfangen?)...
Hallo,
ist das Programm mit GUI = YES compiliert ?
Dann basiert es auf einem XbpCrt() und das hat einen XbpCrt():close slot.
Ich verwende bei meinem in der abgewandelten AppSys:
in prog_ende() wird dann gefragt ob die Schleife verlassen werden soll oder nicht.
Wenn ja raumt es auf und quit ...
Wenn nein, Bildschirm refreshen und weiter ...
Wie heist eigentlich die Klasse bei GUI=NO ?
ist das Programm mit GUI = YES compiliert ?
Dann basiert es auf einem XbpCrt() und das hat einen XbpCrt():close slot.
Ich verwende bei meinem in der abgewandelten AppSys:
Code: Alles auswählen
oCrt:close := {|| prog_ende() }
// -> die Funktion die bei uns von F12 zum Beenden aufgerufen wird.
Oder aber ...
SetAppWindow():close := {|| prog_ende() } // im Haupprogramm
Wenn ja raumt es auf und quit ...
Wenn nein, Bildschirm refreshen und weiter ...
Wie heist eigentlich die Klasse bei GUI=NO ?
Gruß
Hubert
Hubert
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hallo Hubert,
das Programm ist im Textmodus, also mit GUI=NO compiliert.
Deine letzte Frage trifft genau den Punkt...
David
das Programm ist im Textmodus, also mit GUI=NO compiliert.
Deine letzte Frage trifft genau den Punkt...
David
Zuletzt geändert von dtmackenzie am Fr, 19. Jun 2009 15:51, insgesamt 1-mal geändert.
Viele Grüße,
David
David
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weiter Frage ("Close" abfangen?)...
Hi,
probier doch mal ob SetAppWindow() was sinnvolles zurück gibt, bzw.
versuche gleiche SetAppWindow():close := {|| myfunk() }
Bei der 1.90.355 könnte ein AppObject() helfen, aber ich habe es jetzt nicht probiert.
probier doch mal ob SetAppWindow() was sinnvolles zurück gibt, bzw.
versuche gleiche SetAppWindow():close := {|| myfunk() }
Bei der 1.90.355 könnte ein AppObject() helfen, aber ich habe es jetzt nicht probiert.
Gruß
Hubert
Hubert
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Erfolg! Und eine weiter Frage ("Close" abfangen?)...
siehe dir doch mal in die c:\ALASKA\XPPW32\SOURCE\SYS\AppSys.prgdtmackenzie hat geschrieben:das Programm ist im Textmodus, also mit GUI=NO compiliert.
Deine letzte Frage trifft genau den Punkt...
wenn GUI=NO -> CASE nAppType == APPTYPE_VIO .OR. nAppType == APPTYPE_NOVIO
in der AppSys.PRG wird auch das oCrt := RootCrt():New() erzeugt und mit SetAppWindow ( oCrt )
das oCrt "Fenster" als Ausgabe gewählt.
... nun gibt SetAppWindow() ohne Parameter das "Fenster" zurück -> oCrt und da kannst du nun
deinen oCrt:close := {|| myEnde() } reinpacken. Da es nach dem oCrt:create() ist muss man
evtl. ein oCrt:configure() ausführen ... müsste mal in alten Source kramen ...
gruss by OHR
Jimmy
Jimmy
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hi,
also ich habe es probiert. Man muss nach
kein configure() ausführen, da ja an den Einstellungen für die Resource etc. nichts geändert wird.
Erst wenn der Event ausgelöst wird, wird nachgesehen ob die Instanzvariable (Callback-Slot) ungleich NIL ist.
ABER man MUSS ein XbpCRT() Fenster haben (-> GUI=YES ) sonst kommt Instanzvariable nicht gefunden.
also ich habe es probiert. Man muss nach
Code: Alles auswählen
SetAppWindow():close := {|| EndeFunc() }
Erst wenn der Event ausgelöst wird, wird nachgesehen ob die Instanzvariable (Callback-Slot) ungleich NIL ist.
ABER man MUSS ein XbpCRT() Fenster haben (-> GUI=YES ) sonst kommt Instanzvariable nicht gefunden.
Gruß
Hubert
Hubert
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Ja, SetAppWindow() ergibt ein RootCrt bzw. VCrt Objekt, beim Versuch SetAppWindow():close zuzuweisen bekomme ich die Fehlermeldung "Member-Variable ist für dieses Objekt unbekannt".
Trotzdem Danke für die nette Idee!
Jetzt ab ins Wochenende...
David
Trotzdem Danke für die nette Idee!
Jetzt ab ins Wochenende...
David
Viele Grüße,
David
David
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Also mit dem AppObject() wird es wohl auch nicht gehen, da dieses (so wie ich das verstehe) nicht für den Close Event zuständig ist.
ABER !
mir viel gerade ein, es gibt eine Stelle die fürs Aufräumen zuständig ist, EXIT PROCEDURE
aber auch diese wird nach meinem Test nicht aufgerufen ...
Kann man eine Console nicht so einstellen, dass diese nicht per X beendet werden kann ?
ABER !
mir viel gerade ein, es gibt eine Stelle die fürs Aufräumen zuständig ist, EXIT PROCEDURE
aber auch diese wird nach meinem Test nicht aufgerufen ...
Kann man eine Console nicht so einstellen, dass diese nicht per X beendet werden kann ?
Gruß
Hubert
Hubert
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hi David,
auch Dein Avatar (Bild) ist leider defekt.
Bitte passe doch dein Profil entsprechend an.
Vielen Dank,
Martin
auch Dein Avatar (Bild) ist leider defekt.
Bitte passe doch dein Profil entsprechend an.
Vielen Dank,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hi Martin,
mein Avatar war auf unserer Webseite, ging verloren bei Provider-Wechsel (von 1&1 nach Strato).
Hab ich aber nun direkt ins Forum hochgeladen.
Hi Hubert,
ich habe letzte woche alle QUITs in der Anwendung mit einer eigener Funktion ersetzt - dafür wäre EXIT PROCEDURE auf alle Fälle eleganter gewesen.
Leider habe ich keinen Weg gefunden, das X in der Consoleneinstellungen zu unterbinden.
Unser Gerätetreiberprogrammierer hat vorgeschlagen, einen zweiten Prozess als "Wächter" zu starten und mit Windows-API FindWindow() bzw. EnumWindows() zu kontrollieren, ob das Programm noch läuft. Naja, den Gedanke lasse ich lieber eine Woche reifen...
Viele Grüße,
David
mein Avatar war auf unserer Webseite, ging verloren bei Provider-Wechsel (von 1&1 nach Strato).
Hab ich aber nun direkt ins Forum hochgeladen.
Hi Hubert,
ich habe letzte woche alle QUITs in der Anwendung mit einer eigener Funktion ersetzt - dafür wäre EXIT PROCEDURE auf alle Fälle eleganter gewesen.
Leider habe ich keinen Weg gefunden, das X in der Consoleneinstellungen zu unterbinden.
Unser Gerätetreiberprogrammierer hat vorgeschlagen, einen zweiten Prozess als "Wächter" zu starten und mit Windows-API FindWindow() bzw. EnumWindows() zu kontrollieren, ob das Programm noch läuft. Naja, den Gedanke lasse ich lieber eine Woche reifen...
Viele Grüße,
David
Viele Grüße,
David
David
- Martin Altmann
- Foren-Administrator
- Beiträge: 16586
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hallo David,
vielen Dank!
Tipp: Wende Dich an Sören und komme mit ihm gemeinsam am 1.8. nach Osnabrück.
Dort kannst Du Steffen Pirsig direkt fragen - ich mache nur noch GUI und habe mich mit Hybrid/VIO damals (vor Jahren) nicht lange aufgehalten...
Viele Grüße,
Martin
vielen Dank!
Tipp: Wende Dich an Sören und komme mit ihm gemeinsam am 1.8. nach Osnabrück.
Dort kannst Du Steffen Pirsig direkt fragen - ich mache nur noch GUI und habe mich mit Hybrid/VIO damals (vor Jahren) nicht lange aufgehalten...
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hi Martin,
leider kann ich nicht nach Osnabrück - bin am 1.8. außer Lande.
Die Wochenenden sind sowieso meistens anders geplant...
Ich wollte mich aber doch bald bei Sören melden - da hast Du mich gerade daran erinnert...
Viele Grüße,
David
leider kann ich nicht nach Osnabrück - bin am 1.8. außer Lande.
Die Wochenenden sind sowieso meistens anders geplant...
Ich wollte mich aber doch bald bei Sören melden - da hast Du mich gerade daran erinnert...
Viele Grüße,
David
Viele Grüße,
David
David
-
- Rekursionen-Architekt
- Beiträge: 237
- Registriert: Do, 14. Aug 2008 14:59
- Wohnort: Straelen
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 3 Mal
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Hallo David,
ich verstehe nicht ganz, warum du nicht mit GUI = YES kompilierst?
Ein xbpCrt-Fenster bleibt auch dann ein Textmodus-Fenster. Der Unterschied ist,
dass man das Fenster in der Größe verändern kann (z.B. 30 Zeilen x 100 Spalten) und
man auf Instanzvariable und Methoden der xbpcrt-Klasse zugreifen kann. Für dich am wichtigsten
ist aber, dass wenn ein Benutzer den Windows "X-Knopf" oben rechts im Fenster clickt,
ein Ereignis xbeP_Close generiert wird, welches auch ein Textmodus-Programm über einen
Codeblock auswerten kann.
Für ein Standard-Clipper Crt-Fenster (25 x 80) habe ich in der main() folgenden Code untergebracht:
Ich hoffe, dass du dein Problem so in den Griff bekommst und keine weiteren Kompatibilitätsprobleme auftauchen.
ich verstehe nicht ganz, warum du nicht mit GUI = YES kompilierst?
Ein xbpCrt-Fenster bleibt auch dann ein Textmodus-Fenster. Der Unterschied ist,
dass man das Fenster in der Größe verändern kann (z.B. 30 Zeilen x 100 Spalten) und
man auf Instanzvariable und Methoden der xbpcrt-Klasse zugreifen kann. Für dich am wichtigsten
ist aber, dass wenn ein Benutzer den Windows "X-Knopf" oben rechts im Fenster clickt,
ein Ereignis xbeP_Close generiert wird, welches auch ein Textmodus-Programm über einen
Codeblock auswerten kann.
Für ein Standard-Clipper Crt-Fenster (25 x 80) habe ich in der main() folgenden Code untergebracht:
Code: Alles auswählen
//Crt-App-Fenster
aSizeDesktop := AppDesktop():currentSize()
oCrt := SetAppWindow()
oCrt:close := {|| session_ende()}
oCrt:FontName := "TERMINAL"
oCrt:FontHeight := 18
oCrt:FontWidth := 10
oCrt:Border := XBPDLG_SIZEBORDER
oCrt:configure()
aSize := oCrt:currentSize()
aPos := { (aSizeDesktop[1]-aSize[1]) /2, (aSizeDesktop[2]-aSize[2]) /2}
oCrt:SetTitle("FI-Session " + Str(ses_nr))
oCrt:configure(NIL,NIL,aPos,25,80)
Viele Grüße
Dieter
Was man nicht versteht, besitzt man nicht.
Dieter
Was man nicht versteht, besitzt man nicht.
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Yup Du hast völlig Recht.Dieter hat geschrieben:ich verstehe nicht ganz, warum du nicht mit GUI = YES kompilierst?
Damit es noch mehr nach Windows aussieht kann man mit einem XbpDialog() in der Main anfangen
und auf die oDialog:drawingArea das oCrt Fenster setzen. Da das oCrt ja nun ein (MDI) Child ist
kannst du den oCrt:title nun in den oDialog:title verlegen und ja auch das XbpMenu() benutzen ...
also David, der nächste Schritt Xbase++ nach GUI steht an
gruss by OHR
Jimmy
Jimmy
- dtmackenzie
- Rekursionen-Architekt
- Beiträge: 265
- Registriert: Do, 22. Nov 2007 9:02
- Wohnort: Leipzig
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 22 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage ("Close" abfangen?)...
Danke Dieter, Danke Jimmy.
Ja, Ihr habt doch Recht, ich sollte das bald probieren.
Für MDI/Multithreading ist die Anwendung nicht ausgelegt, aber z.B. größere Fenster wären auch schon von Nutzen.
Also, ich markiere diesen Diskussionsfaden erstmal als erledigt.
Viele Grüße,
David
Ja, Ihr habt doch Recht, ich sollte das bald probieren.
Für MDI/Multithreading ist die Anwendung nicht ausgelegt, aber z.B. größere Fenster wären auch schon von Nutzen.
Also, ich markiere diesen Diskussionsfaden erstmal als erledigt.
Viele Grüße,
David
Viele Grüße,
David
David
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage... [ERLEDIGT]
David,
MDI und Multithreading sind 2 Paar ganz verschiedene Schuhe. Du kannst zwar beides gleichzeitig nutzen, musst aber nicht.
Jan
MDI und Multithreading sind 2 Paar ganz verschiedene Schuhe. Du kannst zwar beides gleichzeitig nutzen, musst aber nicht.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- brandelh
- Foren-Moderator
- Beiträge: 15710
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 73 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Erfolg! Und eine weitere Frage... [ERLEDIGT]
Hi,
auch wird das Programm als solches nicht zu einem GUI / MDI etc. Programm
nur weil der GUI=YES gesetzt wird. Es sieht bis auf wenige Ausnahmen noch genauso aus wie vorher.
Nur kann man nun alles nutzen, was Xbase++ mehr zur Verfügung stellt als Clipper.
Vorteile Z.B.
- XbpPrinter() (oder meine Druckerklasse )
- XbpCrt() Fenster steuern (Titel, Größe, Schriftart, CLOSE Event etc.)
- GUI Meldungen bzw. Auswahlfenster (wenn man möchte)
...
Nachteile (falls man das so nennen will ...)
- Kein VOLLBILD Modus, der mit CMD Fenstern möglich ist oder war (???), schon lange nicht mehr probiert
- Schriftart kann nicht über das äußere Consolenmenü eingestellt werden (nur im Programm, was besser ist ...)
Zu dem Thema passt mein MIG_01 Vortrag auf der Devon 2007, der liegt in der Wissensdatenbank (wenn ich mich jetzt nicht irre).
auch wird das Programm als solches nicht zu einem GUI / MDI etc. Programm
nur weil der GUI=YES gesetzt wird. Es sieht bis auf wenige Ausnahmen noch genauso aus wie vorher.
Nur kann man nun alles nutzen, was Xbase++ mehr zur Verfügung stellt als Clipper.
Vorteile Z.B.
- XbpPrinter() (oder meine Druckerklasse )
- XbpCrt() Fenster steuern (Titel, Größe, Schriftart, CLOSE Event etc.)
- GUI Meldungen bzw. Auswahlfenster (wenn man möchte)
...
Nachteile (falls man das so nennen will ...)
- Kein VOLLBILD Modus, der mit CMD Fenstern möglich ist oder war (???), schon lange nicht mehr probiert
- Schriftart kann nicht über das äußere Consolenmenü eingestellt werden (nur im Programm, was besser ist ...)
Zu dem Thema passt mein MIG_01 Vortrag auf der Devon 2007, der liegt in der Wissensdatenbank (wenn ich mich jetzt nicht irre).
Gruß
Hubert
Hubert