Speichern mit F12

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Speichern mit F12

Beitrag von satmax »

Ich möchte gerne in allen Dialogen (oGet, Memoedit) mit F12 anstelle mit PgDn speichern. Was ist hier der beste/einfachste Weg?

Gruß
Markus
Gruß
Markus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von Jan »

Wo ist denn PgDn als Speichern-Aufruf hinterlegt?

Ich würde das in der Event-Schleife machen. Das könnte dann z. B. so aussehen:

Code: Alles auswählen

DO WHILE .T.
   nEvent := AppEvent(@mp1, @mp2, @oEventXbp)

   // Für einige XBase-Parts ein anderes Tastaturverhalten einsetzen
   IF nEvent == xbeP_Keyboard                                                                      //Ist das überhaupt ein Tastaturevent? Ansonsten aus Performancegründen die ganze Schleife überspringen
      IF mp1 = xbeK_ENTER                                                                          // Ist das ein Enter? Darum geht es schließlich.
         IF oEventXbp:isDerivedFrom("XBPPUSHBUTTON")                                               // Ist das ein Pushbutton?
            PostAppEvent(xbeP_Activate, NIL, NIL, oEventXbp)                                       // Dann auslösen, wie mit Leertaste
          ELSEIF oEventXbp:isDerivedFrom("XbpBrowse")                                              // Ist das eine Browse-Spalte?
            PostAppEvent(xbeK_RIGHT, NIL, NIL, oEventXbp)                                          // Dann in die nächste Spalte springen, wie mit PfeilRechts
          ELSEIF oEventXbp:isDerivedFrom("XbpCheckBox")                                            // Ist das eine Checkbox?
            PostAppEvent(xbeK_TAB, NIL, NIL, oEventXbp)                                            // Dann verlasse, wie mit Tab
          ELSEIF oEventXbp:isDerivedFrom("XbpComboBox")                                            // Ist das eine Combobox?
            PostAppEvent(xbeK_TAB, NIL, NIL, oEventXbp)                                            // Dann verlasse, wie mit Tab
          ELSEIF oEventXbp:isDerivedFrom("XbpSle")                                                 // Ist das ein SLE?
            mp1 := xbeK_TAB                                                                        // Dann verlasse, wie mit Tab
         ENDIF
       ELSEIF mp1 == xbeK_ESC
         IF oEventXbp:isDerivedFrom("XbpListBox")
            mp1 := xbeK_LEFT                                                                       // Dann nicht reagieren
         ENDIF
       ELSEIF mp1 == xbeK_TAB
         IF oEventXbp:isDerivedFrom("XbpListBox")
            mp1 := xbeK_LEFT                                                                       // Dann nicht reagieren
         ENDIF
       ELSEIF mp1 = xbeK_ALT_F4                                                                    // Möchte jemand das Programm mit Alt F4 beenden?
         mp1 := xbeK_ALT                                                                           // Das Menü aktivieren
      ENDIF
   ENDIF

   oEventXbp:handleEvent(nEvent, mp1, mp2)
ENDDO
Da wird dann z. B. mit Enter der Pushbutton ausgelöst, was normalerweise durch die Leertaste passiert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von satmax »

Ich hatte leider nicht erwähnt das ich TopDown verwende. Ich habe aber eine einfache Lösung:

Source "tdcDEget.prg":

aus ELSEIF nKey == xbeK_PGDN
wurde ELSEIF nKey == xbeK_PGDN .OR. nKey == xbeK_F12

das ganze zwei mal, funktioniert nun super und man kann mit PgDn oder F12 speichern.

Übrigens finde ich TD ist eine Spitzen Erweiterung. Ich bin total begeistert was in den paar Tagen bereits möglich war. Da mein altes Clipperprogramm bereits mit Fenster- und Eventtechnik ausgestattet war, habe ich mich entschlossen gleich alles sauber mit GUI zu programmieren. Ich habe schon mehrer komplette Dialoge (alle in eigene Treads) laufen, klappt schon sehr gut!

Gruß
Markus
Gruß
Markus
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14653
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von Jan »

Hallo Markus,

und TopDown hat keine Event-Schleife? Kann ich garnicht glauben.

Der Vorteil, das dorthin zu legen ist, daß das dann allgemein gültig ist. Du mußt nicht bei jedem entsprechenden GUI-Element daran denken, das dort einzubauen.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von satmax »

Das passt schon, das ist ja der Vorteil, "tdcDEget.prg" ist von TopDown, einmal geändert und es gilt im ganzen Programm. Da ich mehrer Threads habe, habe ich auch mehrer Event-Schleifen die ich alle extra behandeln müsste.

Kunden -> eigener Tread, mehrer Instanzen möglich
Lieferanten -> eigener Tread, mehrer Instanzen möglich
Adressen -> eigener Tread, mehrer Instanzen möglich
Auftrag -> eigener Tread, mehrer Instanzen möglich
....
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von satmax »

Ich habe es jetzt etwas anders gelöst:

CLASS myDEget FROM tdcDEget

Ich habe mir eine Subclasse angelegt und die

METHOD Keyboard

überschrieben. Das ist IMHO einfacher upzudaten.
Gruß
Markus
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von UliTs »

satmax hat geschrieben:...Ich habe mir eine Subclasse angelegt und die

Code: Alles auswählen

METHOD Keyboard
überschrieben. Das ist IMHO einfacher upzudaten.
Sehr gute Lösung :D

Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9361
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 101 Mal
Danksagung erhalten: 361 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von Tom »

Sehr gute Lösung
Kann man so oder so sehen. :wink:

Ich hätte den KEYBOARD-Callback des MLE bzw. der, falls vorhanden, abgeleiteten Basisklasse verwendet. Das ist auch übersichtlicher und flexibler.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Speichern mit F12

Beitrag von AUGE_OHR »

Tom hat geschrieben:Kann man so oder so sehen. :wink:
satmax (?) verwendet doch TopDown

Code: Alles auswählen

CLASS myDEget FROM tdcDEget
ich denke das Clayton da "mehr" drin hat als die Basis Class besitzt und das über das ganze System "wirkt".

ich staune wie schnell satmax sich in Xbase++ eingearbeitet hat, weiter so :thumbright:
gruss by OHR
Jimmy
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von satmax »

AUGE_OHR hat geschrieben:
Tom hat geschrieben:Kann man so oder so sehen. :wink:
satmax (?) verwendet doch TopDown

Code: Alles auswählen

CLASS myDEget FROM tdcDEget
ich denke das Clayton da "mehr" drin hat als die Basis Class besitzt und das über das ganze System "wirkt".

ich staune wie schnell satmax sich in Xbase++ eingearbeitet hat, weiter so :thumbright:
Ja, natürlich ist da mehr drinn, Daher habe ich ja nur eine Methode überschrieben, copy & past und 2 Zeilen geändert.

Clayton hat aber das als Anregung für TD V9 aufgenommen und wird mir den entsprechenden Source in den nächsten Tagen zur Verfügung stellen. Dann geht das alles ohne Subclassing: "I will be happy to send you the code in case you want to use it (it would save you from doing all the subclassing),..."

Naja, von eingearbeitet bin ich schon noch ein Stück entfernt... :) Ist halt wie mit dem Radfahren. ;)

Das schöne an TopDown ist, das der komplette Source mit dabei ist (super zu debuggen) sowie auch fertige "Source Templates". Damit sind auch komplexere Stammdaten in kürzester Zeit realisiert und es ist ein perfektes "learning by doing"!

Wo es mir noch etwas fehlt ist bei den Codeblöcken, Das mit den "When Clauseln" und "Picture Mask" (in Verbindung mit den oGet Objekten), da muss ich mich erst noch etwas tiefer einarbeiten.

Was in Clipper

Code: Alles auswählen

  @ 13,55 GET mkue PICT "!" VALID mkue$ "JN"

war, wird jetzt

Code: Alles auswählen

#DEFINE validJN {|o| o:editbuffer() $ "JN" }
...
oGet := myDEget(nR,nGet2,fieldblock("KUE"),oDlg,oDa,;
                 1,"!",validJN,,,,,,,,,,,,,,aViewClr,,,,aHiLiteClr,aEditClr)
...
Ich finds per define halt besser lesbar und nicht so anfällig auf Tippfehler.

Achja, bisher habe ich alle Bildschirmmaksen mit Hand gemacht. IMHO taugen die Designer alle nicht... :D

Gruß
Markus
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 831
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Speichern mit F12

Beitrag von satmax »

Clayton hat mir eine Anpassung (Vorabversion) geschickt. Jetzt genügt folgendes:

oDlg:nSaveKey := xbeK_F12
oDlg:nMleSaveKey := xbeK_F12
Gruß
Markus
Antworten