Überschreiben von übereinanderliegenden Fenstern

Grafische Primitive, XbaseParts und Darstellungsfragen allgemein.

Moderator: Moderatoren

Antworten
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Überschreiben von übereinanderliegenden Fenstern

Beitrag von Manfred »

Hi,

ich meine es wäre hier schon mal angesprochen worden, ich finde es aber nicht.

Ich habe ein Dialogfenster gebaut, in dem ich über GraXXX etwas anzeige. Danach blende ich eine Abfrage mit einem Dialog drüber. Wenn ich die Abfrage nun mit der Maus über den Bildschrim bewege, dann wird alles darunterliegende wegradiert. Wo muß ich nochmal nachlesen, wie man das verhindern kann?
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
Du musst das GraXXX in der bei dem ::XbpDialog:drawingarea:paint-Event aufgerufenen Methode benutzen! Dann wird es auch bei jedem Überdecken/Wiederaufdecken neu gezeichnet...

Code: Alles auswählen

...
::XbpDialog:drawingArea:paint	:= { | a, b, c | a := c:lockPS(), ;
																			::Satzanzeige( a ), ;
																			c:unlockPS( a ) }
...

method _Richtermas:Satzanzeige( a )
...
GraStringAt( a, .....
Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

:-k ich verstehe kein Wort.... :dontknow:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Nicht :?:
Poste mal Deinen Code des Dialogfensters!

Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

Hier der Ausschnitt. (Sind meine 2.Gehversuche unter GUI)
Muß eine Anzeige am Bildschirm und der Druck davon eigentlich so kompliziert sein, oder mache ich es nur umständlich? Habe ich mir aus den Beispielen zusammengeklaubt, aber nicht wirklich verstanden. Das mit den Fonts klappt auch nicht. Am Bildschirm zwar, aber beim Druck braucht man eine Lupe.

Code: Alles auswählen

LOCAL aSize
                LOCAL aViewPort
                LOCAL cArt
                LOCAL lNeuerSatz                                                // wenn ein neuer Kassenberichtssatz angefügt werden soll
                LOCAL lSatzGefunden     := .F.
                LOCAL nI, nY
                LOCAL oDevice
                LOCAL oDialog
                LOCAL oFontBs := XbpFont():new():create("10.Arial.bold")
                LOCAL oFontPr := XbpFont():new():create("12.Arial.bold")
                LOCAL oPs

                MEMVAR oKbericht
                MEMVAR oMessage
                MEMVAR oPrinter
                MEMVAR oUmsatz

                aSize := oPrinter:paperSize()
                aSize := { aSize[5] - aSize[3], aSize[6] - aSize[4] }

oDialog := XbpDialog():new()
                oDialog:titleBar := .F.
                oDialog:create(SetAppWindow(),,{0,0},{450,700})
                CenterControl(oDialog)
                oPs     := XbpPresSpace():new()
                oDevice := oDialog:drawingArea:winDevice()
                oPs:create(oDevice, aSize)
                GraSetFont(oPs, oFontBS)
                GraBox(oPs, {0,0}, {440,690})
                FOR nI := 660 TO 30 STEP -30
                    GraLine(oPs,{0,nI}, {440,nI})
                NEXT
                GraLine(oPs,{70,0},{70,690})                                    // Linie für Buchungskonto links
                GraLine(oPs,{250,0},{250,690})                                  // Linie für Erklärung links
                GraLine(oPs,{320,0},{320,690})                                  // Linie für Einnahmen links und Ausgaben rechts
                (oKBericht:nArea)->(DbGoTop())                                  // jetzt geht es wieder von vorne los
                nY := 670
                DO WHILE ! (oKBericht:narea)->(Eof())
                   nY -= 30
                   GraStringAt(oPs,{10,nY},(oKbericht:nArea)->buchungkto)
                   GraStringAt(oPs,{75,nY},(oKbericht:nArea)->bemerkung)
                   (oKBericht:narea)->(DbSkip())
                ENDDO
                IF oMessage:anzeigen("Soll der Kassenbericht gedruckt werden?",.T.,"J")
                   aViewPort := oPS:setViewPort()
                   oPS:configure(oPrinter)
                   oPrinter:startDoc()
                   GraSetFont(oPs, oFontPR)
                   GraBox(oPs, {100,50}, aSize)
                   GraLine(oPs,{300,50},{300,aSize[2]})                            // Linie für Buchungskonto links
                   GraLine(oPs,{1500,50},{1500,aSize[2]})                          // Linie für Erklärung links
                   GraLine(oPs,{1800,50},{1800,aSize[2]})                          // Linie für Einnahmen links und Ausgaben rechts
                   (oKBericht:nArea)->(DbGoTop())                                  // jetzt geht es wieder von vorne los
                   FOR nI := 50 TO aSize[2] STEP 100
                       GraLine(oPs,{100,50+nI}, {aSize[1],50+nI})
                   NEXT
                   nY := aSize[2]
                   DO WHILE ! (oKBericht:narea)->(Eof())
                      nY -= 100
                      GraStringAt(oPs,{100,nY},(oKbericht:nArea)->buchungkto)
                      GraStringAt(oPs,{310,nY},(oKbericht:nArea)->bemerkung)
                      (oKBericht:narea)->(DbSkip())
                   ENDDO
                   oPrinter:endDoc()
                   oPS:configure(oDevice)
                   oPS:setViewPort( aViewPort )
                ENDIF
                oDialog:destroy()
und hier das teil, das die Nachricht auf den Bildschirm bringt.
Fällt mir aber gerade auf, das es eine Confirmbox ist....

Code: Alles auswählen

METHOD UserMessages:anzeigen(cText,lQuestion,cCorrect,cIcon)
       LOCAL nChoice

       DEFAULT lQuestion TO .F.
       DEFAULT cIcon TO " "

       ::lSuccess := .F.                                                        // damit im Zweifelsfalle keine JA Aussage angenommen wird
       IF PCOUNT() = 1
          lQuestion := .F.
       ENDIF
       IF ! lQuestion                                                        // Standardmäßig soll nur bestätigt werden
          ::nButtons := XBPMB_OK
          ::nStyle   := XBPMB_INFORMATION
       ELSE
          ::nButtons := XBPMB_YESNO
          ::nStyle   := XBPMB_QUESTION
          IF cCorrect = "N"
             ::nStartBtn := XBPMB_DEFBUTTON2
          ELSE
             ::nStartBtn := XBPMB_DEFBUTTON1
          ENDIF
       ENDIF
       IF UPPER(cIcon) == "C"
          ::nStyle := XBPMB_CRITICAL
       ELSEIF UPPER(cIcon) == "W"
          ::nStyle := XBPMB_WARNING
       ENDIF
       nChoice := CONFIRMBOX(,cText,::cTitle, ::nButtons, ::nStyle, ::nStartBtn)
       IF nChoice = XBPMB_RET_OK .OR. nChoice = XBPMB_RET_YES
          ::lSuccess := .T.
       ENDIF
RETURN ::lSuccess
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hallo Manfred,
ah - Du benutzt keine Klasse! Dann weiß ich nicht, ob das so auch geht - einfach mal probieren:

Code: Alles auswählen

[color=red]hinter oDialog:titleBar := .F.:[/color]
oDialog:drawingArea:paint   := { | a, b, c | a := c:lockPS(), ;
	                                Bildanzeige( a, oDevice, aSize ), ;
	                                c:unlockPS( a ) }

[color=red]Die Zeilen von oPs := XbpPresSpace.... bis einschließlich Deiner DO WHILE ! (oKBericht....)-Schleife wird dann in die Prozedur Bildanzeige ausgelagert[/color]

procedure Bildanzeige( a, oDevice, aSize )
local nI, nY
// oPs     := XbpPresSpace():new()
oDevice := oDialog:drawingArea:winDevice() 
a:create(oDevice, aSize) 
GraSetFont(a, oFontBS) 
GraBox(a, {0,0}, {440,690}) 
FOR nI := 660 TO 30 STEP -30 
  GraLine(a,{0,nI}, {440,nI}) 
NEXT 
GraLine(a,{70,0},{70,690})                                    // Linie für Buchungskonto links 
GraLine(a,{250,0},{250,690})                                  // Linie für Erklärung links 
GraLine(a,{320,0},{320,690})                                  // Linie für Einnahmen links und Ausgaben rechts 
(oKBericht:nArea)->(DbGoTop())                                  // jetzt geht es wieder von vorne los 
nY := 670 
DO WHILE ! (oKBericht:narea)->(Eof()) 
  nY -= 30 
  GraStringAt(a,{10,nY},(oKbericht:nArea)->buchungkto) 
  GraStringAt(a,{75,nY},(oKbericht:nArea)->bemerkung) 
  (oKBericht:narea)->(DbSkip()) 
ENDDO
return
Viele Grüße,
Martin
:grommit:
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.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Martin,

geht nicht. Es wird sofort in die Abfrage gesprungen, ob gedruckt werden soll. Eine Anzeige am Bildschirm erfolgt nicht.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Martin Altmann
Foren-Administrator
Foren-Administrator
Beiträge: 16516
Registriert: Fr, 23. Sep 2005 4:58
Wohnort: Berlin
Hat sich bedankt: 111 Mal
Danksagung erhalten: 48 Mal
Kontaktdaten:

Beitrag von Martin Altmann »

Hmmm,
dann füge doch parallel dazu noch mal folgende Zeilen hinter der oDialog:drawingArea:paint-Zeile ein:

Code: Alles auswählen

oPs := XbpPresSpace():new()
Bildanzeige( oPS, oDevice, aSize )
Viele Grüße,
Martin
:grommit:
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.
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

Hallo Manfred
Manfred hat geschrieben: Muß eine Anzeige am Bildschirm und der Druck davon eigentlich so kompliziert sein, oder...
Nachdem ich für verschiedene Formulare hunderte von Zeilen Code geschrieben hatte und dann Änderungen vornehmen mußte, habe ich die XBase-Drucker-Flinte ins Korn geworfen. Ich konnte meinen Chef überzeugen, List & Label zu kaufen (leider die billigste Version, wie ich jetzt feststellen mußte ohne Charts). Auf jeden Fall ist der Formulardruck jetzt fast ein Kinderspiel.

Herzliche Grüße
Gerd
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Gerd,

ja, das lese ich hier immer wieder.

Ich habe mir die Videos angesehen und mal kurz reingerochen. Ich habe im Moment einfach nicht den Kopp dafür. Und außerdem konnte ich trotz der Vorführung zur Zeit nichts damit anfangen. Also muß ich das auf später verschieben.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Gerd König
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 193
Registriert: Fr, 09. Jun 2006 7:52
Wohnort: Nähe Sömmerda

Beitrag von Gerd König »

Halo Manfred,


ich habe natürlich auch nicht alle Formulare mit einem Mal umgestellt.

Zuerst natürlich die neuen und die mit größeren Änderugen. Nächste Woche aktiviere ich das vorletzte geänderte Formular. Das letzte wird wohl erst nächstes Jahr dran kommen. Das Ganze hat sich dann über vier Jahre hingezogen.

Man sollte, wenn L&L installiert ist, wirklich erstmal ein ganz einfaches Formular, eventuell sogar eines ohne Liste erstellen. Dann hat man erst einmal die Grundfunktionalität drauf. Die benötigten L&L-Funktionen sind an zehn Fingern abzählbar.

Ich habe L&L so eingebunden, daß beim Programmstart ereits die Initialisierung erfolgt. Zu jedem Formular gibt es bei mir zwei Funktionen:

1. Design: kann nur vom Entwickler des Formulars aufgerufen werden
2. Drucken, ggf. mit Vorschau

Das Schreiben des Programmcodes für das Design dauert maximal 20min, die Druckfunktion etwas länger, wenn man bereits ein ähnliches Fomular hat und die Funktionen kopieren kann.

Bei Interesse könnte ich mal Grundgerüste für Formulare mit und ohne Liste in die Wissensbasis stellen.

Noch 'nen schönen Abend
Gerd
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

Beitrag von AUGE_OHR »

hi,
Manfred hat geschrieben: Hier der Ausschnitt. (Sind meine 2.Gehversuche unter GUI)
Muß eine Anzeige am Bildschirm und der Druck davon eigentlich so kompliziert sein, oder mache ich es nur umständlich? Habe ich mir aus den Beispielen zusammengeklaubt, aber nicht wirklich verstanden. Das mit den Fonts klappt auch nicht. Am Bildschirm zwar, aber beim Druck braucht man eine Lupe.
deinen Code verstehe ich nicht, aber vielleicht liegt es daran da ich
"von der anderen Seite" komme.

Also ich machen zuerst die "Preview" mit dem Source aus dem Beispiel
von Alaska. Wenn nun alles "OK" ist brauche ich nur oPreview:Print()
auf zu rufen und schon hab ich alles auf dem Drucker.

Die Preview Class hat vor allem den Vorteil das man sich nicht um
"repaint" kümmern muss weil "Zoom ++/--" integriert ist und damit
die Routinen zum "automatischen" repaint.

gruss by OHR
Jimmy
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21192
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Beitrag von Manfred »

Hi Jimmy,

tröste Dich, ich verstehe meinen Code auch nicht immer...... :-(
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Antworten