Scrollbar anzeigen?

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Scrollbar anzeigen?

Beitrag von mini990 »

Hallo,
stehe heute anscheinend absolut auf dem Schlauch...
Ich möchte in einem Dialog ein Formular anzeigen das größer ist.
Das Formular soll scrollbar (und editierbar) sein.
Wie bekomme ich da einen Scrollbalken angezeigt?

Danke im Voraus

Gruß Stefan

Code: Alles auswählen

aSize    := {1280,900}
aRefSize := Appdesktop():currentSize()
aPos:= { Int( (aRefSize[1]  - aSize[1] ) / 2 ) , Int( (aRefSize[2] - aSize[2] ) / 2  ) }

oDlg := XbpDialog():new(Appdesktop() , , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "Formular F1040 "
oDlg:icon     := ICON_APPLICATION
oDlg:create()
SetAppFocus( oDlg )

drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "16.Times New Roman" )
Drawingarea:scrollbars:=XBP_SCROLLBAR_VERT

oFormular := XbpStatic():new( oDlg, , {0,0}, {1240,1754} ) 
oFormular:caption:= BGF1040_1
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()

oDlg:show()
SetAppFocus(oDlg)
CLEAR TYPEAHEAD
nEvent := xbe_None
DO WHILE ! lExit 
...
peternmb
1000 working lines a day
1000 working lines a day
Beiträge: 525
Registriert: Mi, 01. Feb 2006 16:22
Wohnort: 06618 Naumburg

Re: Scrollbar anzeigen?

Beitrag von peternmb »

Die ScrollBar musst du selber definieren, sieht bei mir z.B. so aus:

Code: Alles auswählen

oScroll := XbpScrollbar():new(oDlg:drawingArea,, {oFormular:ysize,1}, {18,AppDesktop():currentSize()[2]-30})
oScroll:type := XBPSCROLL_VERTICAL
oScroll:range:= { 1, 10 }
oScroll:create()
oScroll:scroll := {|mp1| b_scroll(mp1[1],mp1[2]) }

PROCEDURE b_scroll( nScrlPos, nCommand )
if oScroll:isEnabled()
   if nScrlPos==1
      SC_pos= scrollwert
   elseif nScrlPos=10
      SC_pos= 0
   else
      SC_pos= scrollwert+(nScrlPos* (scrollwert/10*-1) )
   endif
   //
   bild_liste:setPos( {0,SC_pos} )
   //
endif
RETURN
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

hi,
mini990 hat geschrieben: Mo, 18. Dez 2017 12:07 Ich möchte in einem Dialog ein Formular anzeigen das größer ist.
Das Formular soll scrollbar (und editierbar) sein.
Wie bekomme ich da einen Scrollbalken angezeigt?
im Grund hast du es schon fast richtig ...

Code: Alles auswählen

   XbpStatic():new( oDlg ...
NEIN, es MUSS immer die o:DrawingArea sein :!:

und das war es auch "fast" schon denn jetzt fehlt nur noch eine "resize" damit der Scrollbar erscheint.

Code: Alles auswählen

   aSize[2] += 1   // + 1 Pixel
   oDlg:SetSize(aSize)
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Da ist jetzt aber immer noch ein Fehler in meinem Code...
Angezeigt wird das Fenster mit einer hellgrauen Scrollbar über die ganze Höhe...

Code: Alles auswählen

aSize    := {1280,900}
aRefSize := Appdesktop():currentSize()
aPos:= { Int( (aRefSize[1]  - aSize[1] ) / 2 ) , Int( (aRefSize[2] - aSize[2] ) / 2  ) }

oDlg := XbpDialog():new(Appdesktop() , , aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "PRISMA32 BG F1040 "
oDlg:icon     := ICON_APPLICATION
oDlg:create()
SetAppFocus( oDlg )

drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "16.Times New Roman" )
Drawingarea:scrollbars:=XBP_SCROLLBAR_VERT


oFormular := XbpStatic():new( Drawingarea, , {0,0}, {1240,1754} ) 
oFormular:caption:= BGF1040_1
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()

oDlg:SetSize({1280,901})
oDlg:Configure()
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

mini990 hat geschrieben: Mo, 18. Dez 2017 17:26Angezeigt wird das Fenster mit einer hellgrauen Scrollbar über die ganze Höhe...
Der Scrollbar gehört zum Dialog Fenster also ist der immer so hoch wie der Dialog ... oder verstehe ich dich falsch ?
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Das Formular (oFormular) ist ja deutlich länger als das Fenster (oDlg)...
...und ich dachte dann kann ich scrollen?
DelUser01

Re: Scrollbar anzeigen?

Beitrag von DelUser01 »

mini990 hat geschrieben: Mo, 18. Dez 2017 12:07Ich möchte in einem Dialog ein Formular anzeigen das größer ist. Das Formular soll scrollbar (und editierbar) sein.
Was meinst Du mit "Formular" bzw oFormular?
Viele SLE untereinander mit Buttons usw. und diese sollen mit dem ScollBar rauf und runter bewegt werden wie im Browser bei HTML?

Nachtrag:
Vermutlich meinst Du so etwas wie bei XbpBrowse()...
Zuletzt geändert von DelUser01 am Mo, 18. Dez 2017 19:31, insgesamt 1-mal geändert.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

mini990 hat geschrieben: Mo, 18. Dez 2017 18:27 Das Formular (oFormular) ist ja deutlich länger als das Fenster (oDlg)...
...und ich dachte dann kann ich scrollen?
mit dem Scrollbar wird das Static Object "bewegt" also der "Inhalt" eines Dialog "Fenster"
gruss by OHR
Jimmy
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2821
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 94 Mal
Danksagung erhalten: 13 Mal

Re: Scrollbar anzeigen?

Beitrag von georg »

Hallo, Stefan -


der kurze, knappe Versuch einer Erklärung:

Da ist ein Fenster (XbpDialog), das eine :drawingArea enthält. Der anzeigbare Bereich der :drawingArea ist durch die angezeigte Grösse des Fensters begrenzt (man sieht also beispielsweise nur 600 * 400 Pixel).

Auf der :drawingArea zeigst Du jetzt ein Formular an, das 600 * 900 Pixel gross ist.

1. Schlussfolgerung: die :drawingArea muss "intern" so gross sein, dass sie das Formular aufnehmen kann.
2. Schlussfolgerung: es ist die :drawingArea, die ich mittels den Scrollbars vertikal verschieben muss, damit alle Elemente des Formulars sichtbar werden.

Wer die "Schuld" hat, kann ich leider nicht sagen, aber in Xbase++ erscheinen in solchen Fällen die Scrollbars nicht von selbst, selbst dann nicht, wenn durch die Definiton der Dialog-Elemente klar ist, dass Scrollbars erforderlich sind. Erst durch eine Grössenänderung (sei es mit der Maus, oder durch das Programm mittels :setsize()) fällt es dem Programm wie Schuppen aus den Haaren, dass Scrollbars nötig sind. Und die erscheinen als Teil der :drawingArea.

Das ganze Thema bräuchte eine bessere Dokumentation seitens Alaska, denn diese Frage kommt immer wieder hoch - scheinbar stromert jeder von uns mal durch diesen Teil des Xbase++-Universums ...
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Hat ein bisschen gedauert....
Der aktuelle Stand ist der:
Der Scrollbalken erscheint sobald ich mit der Maus die Größe des Fensters ändere.
Die Größenänderung über SetSize und Configure anzustoßen schaffe ich nicht.
Sehr Ihr den Fehler?

Code: Alles auswählen

aSize    := {1280,900}
aRefSize := Appdesktop():currentSize()
aPos:= { Int( (aRefSize[1]  - aSize[1] ) / 2 ) , Int( (aRefSize[2] - aSize[2] ) / 2  ) }

oDlg := XbpDialog():new(Appdesktop() , SetAppWindow(), aPos, aSize, , .F.)
*oDlg:taskList := .T.
oDlg:title := "PRISMA32 BG F1040 "
oDlg:icon     := ICON_APPLICATION
oDlg:create()
SetAppFocus( oDlg )

drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "16.Times New Roman" )
Drawingarea:scrollbars:=XBP_SCROLLBAR_VERT


oFormular := XbpStatic():new( Drawingarea, , {0,0}, {1240,1754} ) 
oFormular:caption:= BGF1040_1
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()

oDlg:SetSize({1280,899})
oDlg:Configure()
Weitere Frage: Wenn der Scrollbalken angezeigt wird wie komme ich ohne den Scrollbalken mit der maus zu
verschieben zum Anfang des Formulars?

Gruß Stefan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

mini990 hat geschrieben: Mi, 24. Jan 2018 10:09 Der Scrollbalken erscheint sobald ich mit der Maus die Größe des Fensters ändere.
Die Größenänderung über SetSize und Configure anzustoßen schaffe ich nicht.
wie ich schon schrieb muss der Dialog "sichtbar" sein und reagiert dann erst bei einer Grössenänderung und "erkennt" das es nicht mehr passt.
also versuche nach dem oDialog:Show() ein

Code: Alles auswählen

oDialog:SetSize({x,y})
oder ein

Code: Alles auswählen

oDialog:Clientsize({x,y})
wobei ich bei Grössen Angaben o:ClientSize() bevorzuge (analog zu o:DrawingArea)
mini990 hat geschrieben:Weitere Frage: Wenn der Scrollbalken angezeigt wird wie komme ich ohne den Scrollbalken mit der maus zu
verschieben zum Anfang des Formulars?
im optimalen Fall mit

Code: Alles auswählen

SetAppFocus(oXbp)
ich habe noch zusätzlich eine Maus Routine die den Cursor zur Position des XbPart bringt.

das andere wäre das verschieben der XbpStatic aber dafür sollten alle Pos/Size der anderen Controls auch "im Zugriff" sein.
man kann mit o:LbDown auf der XbpStatic natürlich auch den o:Keyboard oder o:Wheel nutzen um das XbpStatic rauf/runter zu schieben.
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

@ Roland:
Genau so etwas in der Art meine ich:
Viele SLE untereinander (mehr als auf das Fenster passen)
Diese durch scrollen sichtbar machen.


Bin der Meinung dass ich irgendwo mal so ein Beispiel gefunden hatte.
Finde es aber nicht mehr....

Gruß Stefan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

du willst also in einer Schleife die SLE setzten.

Frage : wie sieht denn "dann" dein o:Datalink aus ?

Code: Alles auswählen

METHOD MyQuickBrowse:EditRec(aRowCol,aStru)
...
   oDlg         := XbpDialog():new(AppDesktop(),self,{0,0},,,.F.)
   oDlg:ClientSize := aSize
   oDlg:title      := "Edit Rec"
   oDlg:Close      := {|| lExit := .T. }
   IF lResize = .T.
      oDlg:drawingArea:scrollbars := XBP_SCROLLBAR_VERT
   ENDIF
   oDlg:Create()

   aSize := oDlg:DrawingArea:currentsize()
   nWide := aSize[1]
   oStatic := XbpStatic():new(oDlg:DrawingArea,,{0,0},{nWide, (nCount+1)*30 }  )
   oStatic:Create()
...
   FOR i := 1 TO nCount
      oText := XbpStatic():new(oStatic,,{0,nStep},{50,26}, { { XBP_PP_BGCLR, -255 } } )
      oText:Caption := aHeader[i]
      oText:Create()

      oSLE := XbpSLE():new(oStatic,,{50,nStep}, {nWide-60,26}, { { XBP_PP_BGCLR, XBPSYSCLR_ENTRYFIELD } })
      oSLE:dataLink := MakeBlock(::DataArray,nRow,i,aStru[i][2])
      IF aStru[i][3] > 32
         oSLE:bufferLength := aStru[i][3]
      ENDIF
      oSLE:tabstop := .T.
      oSLE:Create()
      oSLE:Setdata()

      AADD(::aEdit,oSLE)
      nStep -= 30
   NEXT

   oDlg:Show()
   SetAppWindow(oDlg)
   SetAppFocus(oDlg)
   SetAppFocus(::aEdit[1])
   IF lResize = .T.
      oDlg:DrawingArea:SetSize( {aSize[1]+1,aSize[2]+1} )
   ENDIF

   DO WHILE .NOT. lExit = .T.
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
...      
das Problem an einer Schleife ist ja das "i" war rauf zählt. wenn man das nicht auslagert bekommt man immer nur das letzte "i". wenn man es in eine Function übergibt wird daraus eine "detached local" und man bekommt die richtigen Elemente in der Codeblock.

---

habe gerade gesehen das ich diese Konstruktion nicht mehr verwenden sondern einen (undokumentierten) ot4xb Befehl :
ot4xb_automatic_scroll_focus()

das MausWheel funktioniert wenn man sich über der o:DrawingArea befindet.
mit den Cursor kann man natürlich nur innerhalb eines Controls navigieren.
mit TAB kommt man ja zum nächsten Control. wenn er beim letzten ist "schiebt" er beim TAB das ganze runter.

ein Demo davon habe ich 2016 in meinem Vortrag gezeigt, hier für alle
ScrollWheel.zip
need ot4xb
(1.34 KiB) 342-mal heruntergeladen
gruss by OHR
Jimmy
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Habe jetzt hier ein Beispiel gefunden (Scrollpage von Alaska ASCN)
Sooooo wäre es prima, nur noch ein Hintergrundbild dazu...
Gruß Stefan

Code: Alles auswählen

/* Project.XPJ
[PROJECT]
    DEBUG         = yes
    VERSION       = 2.0
    OPENFILES     = SCROLLPAGE.PRG
    PROJECT.XPJ

[PROJECT.XPJ]
    SCROLLPAGE.EXE

[SCROLLPAGE.EXE]
    COMPILE       = xpp
    COMPILE_FLAGS = /q
    DEBUG_SAVE    = no
    GUI           = yes
    LINKER        = alink
    LINK_FLAGS    = 
    RC_COMPILE    = arc
    RC_FLAGS      = /v
// $START-AUTODEPEND
    APPEVENT.CH
    COLLAT.CH
    FONT.CH
    GET.CH
    GRA.CH
    MEMVAR.CH
    NATMSG.CH
    PROMPT.CH
    SET.CH
    STD.CH
    XBP.CH
    SCROLLPAGE.obj
// $STOP-AUTODEPEND
    XPPUI2.LIB
    SCROLLPAGE.PRG
*/

//////////////////////////////////////////////////////////////////////
//
// SCROLLPAGE.PRG
//
// Contents:
//   Sample for a DataEntry ScrollPage-class.
//
// Remarks:
//        - Set the scrollpage-height with nScrollPageHeight
//        - Keyboard & mouse-wheel navigation handled in the event-loop
//
// Have fun & regards, Thomas J. Pool, Minipak software, Email: info@minipak.nl
//
//////////////////////////////////////////////////////////////////////

#include "Appevent.ch"
#include "Common.ch"
#include "Font.ch"
#include "Xbp.ch"
#include "Gra.ch"

PROCEDURE Main ( name )
   LOCAL oDlg, nEvent, mp1, mp2, oXbp, oScroll, oDA, oFirst,;
   nLineSpace := 30, nYpos := 400, nScrollPageHeight := 400

   // create std dialog
   oDlg := GuiStdDialog( "DataEntryScrollPage-class sample", { 200, 200}, { 450, 300})

   // ScrollPage
   oScroll := DataEntryScrollPage():new( oDlg:drawingArea, { 10, 45},;
                                        { oDlg:currentsize()[1]-25, oDlg:currentsize()[2]-85 },;
                                        nScrollPageHeight )
   oScroll:Create()
   oScroll:nStep := nLineSpace

   oDA := oScroll:oScrollPage:drawingarea

   // Fill page

   oXbp := XbpPushButton():new( oDA, , {10, nYpos -= nLineSpace }, { 50, 20} )
   oXbp:caption  := "Bottom"
   oXbp:TabStop  := .T.
   oXbp:activate := {|| oScroll:ScrollDn( 1) }
   oXbp:create()

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace + 10},{ 90, 20}):Create():SetCaption("XbpSLE 1")
   oFirst := XbpSle():new( oDA, , { 100, nYpos }, { 220, 20 } ):create()
   oFirst:TabStop  := .T.
   oFirst:setdata( 'Roll mouse-wheel...')

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace},{ 90, 20}):Create():SetCaption("XbpSLE 2")
   oXbp := XbpSle():new( oDA, , { 100, nYpos }, { 220, 20 } ):create()
   oXbp:TabStop  := .T.
   oXbp:setdata( 'Press PageUp/PageDown-keys...')

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace},{ 90, 20}):Create():SetCaption("XbpSLE 3")
   oXbp := XbpSle():new( oDA, , { 100, nYpos }, { 220, 20 } ):create()
   oXbp:TabStop  := .T.
   oXbp:setdata( 'Press Up/Down/Home/End-keys...')

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace },{ 90, 20}):Create():SetCaption("XbpComboBox 1")
   oXbp := XbpComboBox():New( oDA, , { 100, nYpos }, { 220, 100 } )
   oXbp:XbpSLE:setsize( { 220, 20 })   // DEFAULT
   oXbp:TabStop  := .T.
   oXbp:Create()
   oXbp:XbpSle:setdata( 'Press Tab/Shift-Tab-keys...')

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace},{ 90, 20}):Create():SetCaption("XbpComboBox 2")
   oXbp := XbpComboBox():New( oDA, , { 100, nYpos }, { 220, 100 } )
   oXbp:XbpSLE:setsize( { 220, 20 })   // DEFAULT
   oXbp:TabStop  := .T.
   oXbp:Create()

   XbpStatic():New( oDA,,{ 10, nYpos -= nLineSpace},{ 90, 20}):Create():SetCaption("XbpComboBox 3")
   oXbp := XbpComboBox():New( oDA, , { 100, nYpos }, { 220, 100 } )
   oXbp:XbpSLE:setsize( { 220, 20 })   // DEFAULT
   oXbp:TabStop  := .T.
   oXbp:Create()

   oXbp := XbpCheckbox():new( oDA, , { 10, nYpos -= nLineSpace + 20}, {100,40} )
   oXbp:caption := "XbpCheckbox 1"
   oXbp:TabStop  := .T.
   oXbp:create()

   oXbp := XbpCheckbox():new( oDA, , { 10, nYpos -= nLineSpace}, {100,40} )
   oXbp:caption := "XbpCheckbox 2"
   oXbp:TabStop  := .T.
   oXbp:create()

   oXbp := XbpCheckbox():new( oDA, , { 10, nYpos -= nLineSpace}, {100,40} )
   oXbp:caption := "XbpCheckbox 3"
   oXbp:TabStop  := .T.
   oXbp:create()

   oXbp := XbpPushButton():new( oDA, , {10, nYpos -= nLineSpace }, {50,20} )
   oXbp:caption  := "Top"
   oXbp:TabStop  := .T.
   oXbp:activate := {|| oScroll:ScrollUp( 1) }
   oXbp:create()

   oXbp := XbpPushButton():new( oDlg:drawingArea, , {10,10}, {80,24} )
   oXbp:caption  := "Cancel"
   oXbp:TabStop  := .T.
   oXbp:activate := {|| PostAppEvent( xbeP_Close ) }
   oXbp:create()

   // show dialog
   oDlg:show()
   SetAppFocus( oFirst )

   DO WHILE nEvent <> xbeP_Close
      nEvent := AppEvent( @mp1, @mp2, @oXbp )
      oXbp:handleEvent( nEvent, mp1, mp2 )

      if nEvent == xbeP_Keyboard
         do case
            case mp1 == xbeK_PGUP  ; oScroll:ScrollUp()
            case mp1 == xbeK_PGDN  ; oScroll:ScrollDn()
            case mp1 $ { xbeK_HOME, xbeK_CTRL_UP   }; oScroll:ScrollUp(1)
            case mp1 $ { xbeK_END , xbeK_CTRL_DOWN }; oScroll:ScrollDn(1)
            case mp1 == xbeK_UP    ; oScroll:ScrollUp()
            case mp1 == xbeK_DOWN  ; oScroll:ScrollDn()
            case mp1 == xbeK_TAB // msgbox( str(oXbp:currentpos()[2]))
                 if oXbp:currentpos()[2] - abs( oScroll:oScrollPage:currentpos()[2]) < nLineSpace
                    oScroll:ScrollDn()
                 endif
            case mp1 == xbeK_SH_TAB
                 if ( oXbp:currentpos()[2] - abs( oScroll:oScrollPage:currentpos()[2])) + nLineSpace * 4 > oScroll:oStatic:currentsize()[2]
                    oScroll:ScrollUp()
                 endif
            case mp1 == xbeK_ESC   ; exit
         endcase
      elseif nEvent == xbeM_Wheel
         if mp2[2] < 0
            oScroll:ScrollDn()
         elseif mp2[2] > 0
            oScroll:ScrollUp()
         endif
      endif
   ENDDO

RETURN

**************************

PROCEDURE AppSys
   // no Crt instances are created
RETURN

******************************************************************
* Create std dialog window hidden
******************************************************************

FUNCTION GuiStdDialog( cTitle, aPos, aSize )
   LOCAL oDlg

   DEFAULT cTitle TO "Standard Dialog Window"

   oDlg          := XbpDialog():new( ,,aPos, aSize,, .F. )
   oDlg:icon     := 1
   oDlg:taskList := .T.
   oDlg:title    := cTitle
   oDlg:drawingArea:ClipChildren := .T.
   oDlg:create()
   oDlg:drawingArea:setFontCompoundName( FONT_DEFPROP_SMALL )

RETURN oDlg

*********************************************************
*********************************************************

CLASS DataEntryScrollPage from XbpStatic

EXPORTED:
   VAR oStatic, oScrollPage, nPageInitPos, oVscroll, aSize, nLen, nStep

   METHOD init, create, ScrollPage, scrollup, scrolldn
ENDCLASS

***********************

METHOD DataEntryScrollPage:init( oParent, aPos, aSize, nLen )

::aSize := aSize
::nLen  := nLen
::nStep := 25 // SCROLLSTEPS

::XbpStatic:init( oParent, ,  aPos, aSize ) // GROUPBOX
::XbpStatic:type := XBPSTATIC_TYPE_GROUPBOX
::XbpStatic:clipSiblings := TRUE

::oStatic :=  XbpStatic():new( ::XbpStatic, , { 2, 2}, { aSize[1] - 4, aSize[2] - 12 } )
::oStatic:type :=  XBPSTATIC_TYPE_BGNDRECT

::oScrollPage          := XbpDialog():new( ::oStatic )
::oScrollPage:titleBar := FALSE
::oScrollPage:border   := XBPDLG_NO_BORDER

::oVscroll       := XbpScrollbar():new( ::oStatic )
::oVscroll:type  := XBPSCROLL_VERTICAL
::oVscroll:cargo := 0

return self

************************

METHOD DataEntryScrollPage:create()

::XbpStatic:create()
::oStatic:create()
::oScrollPage:create()

::oScrollPage:setSize( { ::aSize[1] - 19, ::nLen } )

::nPageInitPos := ::oScrollPage:currentsize()[2] - ::oStatic:currentsize()[2]

::oScrollPage:setPos( { 0, -::nPageInitPos } )

::oVscroll:range   := { 0, ::nPageInitPos }
::oVscroll:scrollBoxSize := ::oStatic:currentsize()[2] * ( ::oStatic:currentsize()[2] / ::oScrollPage:currentsize()[2] )
::oVscroll:create()

::oVscroll:scroll := {|mp1| ::ScrollPage( mp1) } //, ::oScrollPage, ::nPageInitPos ) } // aBtwData )}
::oVscroll:setSize( { 16, ::oStatic:currentsize()[2] })
::oVscroll:setPos( { ::aSize[1] - 19, 0 } )

return self

************************ Scroll vertically

METHOD DataEntryScrollPage:ScrollPage( mp1)
local nScrollPos := mp1[1], nCommand := mp1[2], nScroll

// Increase scroll position by 10 pixels
if nCommand == XBPSB_NEXTPOS
   nScrollPos += 10
   ::oVScroll:SetData( nScrollPos )
   nScrollPos := ::oVScroll:GetData()
endif

if nCommand == XBPSB_PREVPOS
   nScrollPos -= 10
   ::oVScroll:SetData( nScrollPos )
   nScrollPos := ::oVScroll:GetData()
endif

::oScrollPage:setPos( { 0, nScrollPos - ::nPageInitPos } )

return self

************************ Scroll vertically

METHOD DataEntryScrollPage:ScrollUp( nTop )
local nScrollPos := if( nTop # NIL, 0, ::oVscroll:getdata() - ::nStep )

nScrollPos := max( 0, nScrollPos )

::oScrollPage:setPos( { 0, nScrollPos - ::nPageInitPos } )
::oVscroll:setdata( nScrollPos )

return self

************************ Scroll vertically

METHOD DataEntryScrollPage:ScrollDn( nBottom )
local nScrollPos := if( nBottom # NIL, ::nPageInitPos, ::oVscroll:getdata() + ::nStep )

nScrollPos := min( ::nPageInitPos, nScrollPos )

::oScrollPage:setPos( { 0, nScrollPos - ::nPageInitPos } )
::oVscroll:setdata( nScrollPos )

return self

Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Mein ursprünglicher Code funktioniert jetzt dank eines Tipps von Jan.

Code: Alles auswählen

oDlg:SetSize({1280,899})
oDlg:Configure()
oDlg:SetSize({1280,900})
oDlg:Configure()
Danke!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Scrollbar anzeigen?

Beitrag von Jan »

Stefan,

ein :SetSize() benötigt kein :configure() dahinter. Gerade gestern hatte Manfred berichtet, daß das sogar negative Auswirkungen haben kann.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21150
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 206 Mal
Danksagung erhalten: 67 Mal

Re: Scrollbar anzeigen?

Beitrag von Manfred »

Nö, das galt in erster Linie für SetParent(). SetSize() habe ich nicht geprüft.
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
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

ohne die beiden Configure() wird der Scrollbalken nicht angezeigt.

Ist es eigentlich auch möglich nur einen Teilbereich zu scrollen?
Soll heissen:
Links habe ich mein "Formular" mit den entsprechenden SLE's
Rechts einige Pushbuttons. Diese sollten beim scrollen stehen bleiben.
???

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

Re: Scrollbar anzeigen?

Beitrag von Jan »

Manfred,

ich weiß. Ich habe mich da auch wohl etwas knapp ausgedrückt. Ich bezog mich bei den Problemen eigentlich ganz allgemein auf die :set...()-Methoden. Nicht speziell das von Stefan beschriebene :setSize(). Wobei ich nicht weiß, ob das wirklich bei allen :set...()-Methoden auftritt, oder wirklich nur bei :setParent(). Es war mir aber den Hinweis wert.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14641
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 87 Mal
Kontaktdaten:

Re: Scrollbar anzeigen?

Beitrag von Jan »

Stefan,

klar, wenn Du die Buttons auf einen anderen Parent setzt. Und die Scrollbar nur auf den parent mit den SLE setzt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

DAS hat jetzt viel zu einfach funktioniert!
Danke Jan, manchmal ist man etwas betriebsblind... :-)

Gruß Stefan
Benutzeravatar
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Noch zwei Fragen....
Das Scrollrad an der Maus funktioniert nicht?
Oder muss ich das manuell programmieren?
Wie bringe ich den Scrollbalken bzw. den oberen Teil der Drawingarea ins "Sichtfeld"?

Gruß Stefan
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Scrollbar anzeigen?

Beitrag von AUGE_OHR »

mini990 hat geschrieben: Do, 08. Feb 2018 17:36 Das Scrollrad an der Maus funktioniert nicht?
Oder muss ich das manuell programmieren?
Callback Slots wie o:Wheel() sind default nicht belegt ... [-X
hier fängt die Arbeit an wenn man was "anders" will als das OS() vorgibt
mini990 hat geschrieben:Wie bringe ich den Scrollbalken bzw. den oberen Teil der Drawingarea ins "Sichtfeld"?
wenn ein Static > o:DrawingArea ist gibt es überhaupt erst einen Scrollbar.
nun reicht die Static gewöhnlich bis oben ... da drüber gibt es gewöhnlich nix mehr.
... oder meinst du einen weiteren XbpDialog auf der o:DrawingArea, ohne Titlebar, als Parent für die Static :?:

angenommen du hättest trotzdem einen Button oberhalb der Static dessen Postion du ja eh "errechnen" müsstest.
ein SetAppFocus(oButton) setzt zwar den Focus aber das bringt das Control noch nicht "automatisch" in das "Sichtfeld".

---

ein "Top-Window" kann ein Menu unterhalb der Titelbar haben. Die Menu Punkte gelten für alle MDI Fenster.
ein einzelnes Fenster wiederum hat gewöhnlich ein rechte-Maustaste Menu wo die Aktionen aufgeführt sind die man mit "dem" Fenster manchen kann.

---

ich habe ja auf Pablos Function

Code: Alles auswählen

ot4xb_automatic_scroll_focus()
hingewiesen wo das Scrollrad der Maus aktive wird sobald man sich über der o:DrawingArea damit befindet.
ob er mit SetAppFocus() dann auf ein "bestimmtes" Control springt und es in den "Sichtbereich" bringt müsste ich überprüfen ... ansonsten werde ich Pablo danach fragen :badgrin:

---

wenn ich das richtig verstanden habe war die Idee ein Bitmap, auf einer XbpStatic, als "Formular" zu nehmen für XbpSLE, richtig :?:

Frage : ist damit auch ein "Ausdruck" vorgesehen :?:

welche Schrift
welche DPI
welche Auflösung Monitor
welche Skale Einstellung
welcher Drucker

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

Re: Scrollbar anzeigen?

Beitrag von Manfred »

mini990 hat geschrieben: Do, 08. Feb 2018 13:20 Mein ursprünglicher Code funktioniert jetzt dank eines Tipps von Jan.

Code: Alles auswählen

oDlg:SetSize({1280,899})
oDlg:Configure()
oDlg:SetSize({1280,900})
oDlg:Configure()
Danke!
welcher ursprüngliche Code?
Wie der Teufel es will, stehe ich gerade genau vor dem selben Problem wie Du standest.
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
mini990
1000 working lines a day
1000 working lines a day
Beiträge: 592
Registriert: Sa, 28. Jan 2006 9:44
Wohnort: Berg-Richtheim bei Neumarkt i.d.Opf.
Danksagung erhalten: 1 Mal

Re: Scrollbar anzeigen?

Beitrag von mini990 »

Hallo Manfred,
sorry, hab Deinen Post jetzt erst gelesen.....

Hier mal der Code:

Code: Alles auswählen

aSize    := {1200,900}
aRefSize := Appdesktop():currentSize()
aPos:= { Int( (aRefSize[1]  - aSize[1] ) / 2 ) , Int( (aRefSize[2] - aSize[2] ) / 2  ) }


oDlg := XbpDialog():new(Appdesktop() , SetAppWindow(), aPos, aSize, , .F.)
oDlg:taskList := .T.
oDlg:title := "Formular sowieso"
oDlg:icon     := ICON_APPLICATION
oDlg:MaxButton:= .F.
oDlg:MinButton:= .F.
oDlg:border := XBPDLG_DLGBORDER
oDlg:close := {|| lExit := .T. }
oDlg:create()
SetAppFocus( oDlg )
drawingArea := oDlg:drawingArea
drawingArea:setFontCompoundName( "16.Times New Roman" )
Drawingarea:scrollbars:=XBP_SCROLLBAR_VERT


oFormular := XbpStatic():new( Drawingarea, , {0,0}, {1024,1550} ) 
oFormular:caption:= "Formular" // das Formular das ich anzeigen will...
oFormular:clipSiblings := .T.
oFormular:type := XBPSTATIC_TYPE_BITMAP
oFormular:create()

oButtons := XbpStatic():new( oDlg, , {1025,0}, {175,900} ) 
oButtons:caption:= NIL
oButtons:clipSiblings := .T.
oButtons:type := XBPSTATIC_TYPE_BITMAP
oButtons:create()

oXbp01 := XbpStatic():new( oFormular, , {15,1470}, {500,25}) // Kassenname
oXbp01:clipSiblings := .T.
oXbp01:options := XBPSTATIC_TEXT_LEFT
oXbp01:Caption:=( "FFFFFFFFFFFFFFFELD1")
oXbp01:setFontCompoundName( "14.Lucida Console" )
oXbp01:create()
oXbp02 := XbpStatic():new( oFormular, , {15,1415}, {550,25}) // Name, Vorname
oXbp02:clipSiblings := .T.
oXbp02:options := XBPSTATIC_TEXT_LEFT
oXbp02:Caption:=( "Mustermann, HansXXXXXXXXXXXXXXXXXXXXXXXX")
oXbp02:setFontCompoundName( "14.Lucida Console" )
oXbp02:create()
oXbp03 := XbpStatic():new( oFormular, , {450,1415}, {120,25}) // Geburtsdatum
oXbp03:clipSiblings := .T.
oXbp03:options := XBPSTATIC_TEXT_LEFT
oXbp03:Caption:=( "01.01.1920")
oXbp03:setFontCompoundName( "14.Lucida Console" )
oXbp03:create()
oXbp04 := XbpStatic():new( oFormular, , {575,1415}, {400,25}) // Krankenkasse
oXbp04:clipSiblings := .T.
oXbp04:options := XBPSTATIC_TEXT_LEFT
oXbp04:Caption:=( "Krankenkasse AOK sowieso")
oXbp04:setFontCompoundName( "14.Lucida Console" )
oXbp04:create()
oXbp05 := XbpStatic():new( oFormular, , {15,1300}, {520,25}) // Anschrift des Patienten
oXbp05:clipSiblings := .T.
oXbp05:options := XBPSTATIC_TEXT_LEFT
oXbp05:Caption:=( "Hinter dem Blumengarten 2, 92318 Berg-Richtheim")
oXbp05:setFontCompoundName( "14.Lucida Console" )
oXbp05:create()
oXbp06 := XbpStatic():new( oFormular, , {575,1300}, {180,25}) // Telefonnummer
oXbp06:clipSiblings := .T.
oXbp06:options := XBPSTATIC_TEXT_LEFT
oXbp06:Caption:=( "09181 - 4061-209")
oXbp06:setFontCompoundName( "14.Lucida Console" )
oXbp06:create()
oXbp07 := XbpStatic():new( oFormular, , {950,1300}, {80,25}) // Geschlecht
oXbp07:clipSiblings := .T.
oXbp07:options := XBPSTATIC_TEXT_LEFT
oXbp07:Caption:=( "M")
oXbp07:setFontCompoundName( "14.Lucida Console" )
oXbp07:create()

oM_01 := XbpStatic():new( oFormular, , {575,1470}, {120,25}) // Eingetroffen am
oM_01:clipSiblings := .T.
oM_01:options := XBPSTATIC_TEXT_LEFT
oM_01:Caption:=( "01.01.1920")
oM_01:setFontCompoundName( "14.Lucida Console" )
oM_01:create()
oM_02 := XbpStatic():new( oFormular, , {800,1470}, {70,25}) // Uhrzeit
oM_02:clipSiblings := .T.
oM_02:options := XBPSTATIC_TEXT_LEFT
oM_02:Caption:=( "12:50")
oM_02:setFontCompoundName( "14.Lucida Console" )
oM_02:create()
oM_03 := XbpStatic():new( oFormular, , {15,1375}, {300,25}) // Beschäftigt als
oM_03:clipSiblings := .T.
oM_03:options := XBPSTATIC_TEXT_LEFT
oM_03:Caption:=( "Beruf beschäftigt als so")
oM_03:setFontCompoundName( "14.Lucida Console" )
oM_03:create()
oM_04 := XbpStatic():new( oFormular, , {450,1375}, {120,25}) // Seit
oM_04:clipSiblings := .T.
oM_04:options := XBPSTATIC_TEXT_LEFT
oM_04:Caption:=( "01.01.1900")
oM_04:setFontCompoundName( "14.Lucida Console" )
oM_04:create()
oM_05 := XbpStatic():new( oFormular, , {575,1375}, {400,25}) // Pflegekasse
oM_05:clipSiblings := .T.
oM_05:options := XBPSTATIC_TEXT_LEFT
oM_05:Caption:=( "Meine Pflegekasse als so")
oM_05:setFontCompoundName( "14.Lucida Console" )
oM_05:create()
oM_06 := XbpStatic():new( oFormular, , {15,1335}, {1000,25}) // Unfallbetrieb
oM_06:clipSiblings := .T.
oM_06:options := XBPSTATIC_TEXT_LEFT
oM_06:Caption:=( "Der Unfallbetrieb wo es passiert ist, mit anschrift und Telefonnummer")
oM_06:setFontCompoundName( "14.Lucida Console" )
oM_06:create()
oM_07 := XbpStatic():new( oFormular, , {775,1300}, {200,25}) // Staatsangehörigkeit
oM_07:clipSiblings := .T.
oM_07:options := XBPSTATIC_TEXT_LEFT
oM_07:Caption:=( "Afroamerikaner")
oM_07:setFontCompoundName( "14.Lucida Console" )
oM_07:create()
oM_08 := XbpStatic():new( oFormular, , {15,1255}, {120,25}) // Unfalltag
oM_08:clipSiblings := .T.
oM_08:options := XBPSTATIC_TEXT_LEFT
oM_08:Caption:=( "01.01.1900")
oM_08:setFontCompoundName( "14.Lucida Console" )
oM_08:create()
oM_09 := XbpStatic():new( oFormular, , {250,1255}, {80,25}) // Unfallzeit
oM_09:clipSiblings := .T.
oM_09:options := XBPSTATIC_TEXT_LEFT
oM_09:Caption:=( "12:12")
oM_09:setFontCompoundName( "14.Lucida Console" )
oM_09:create()





oXbp := XbpPushButton():new( oButtons, , {10,768}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "Seite ~1"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| If(NEU_FORM(oDLG, "MUSTER12"),(DisablePushButtons(drawingarea), Form_Anzeige(oDlg, oFormular, "MUSTER12" ), FORM_EDIT(oDlg, oFormular, .T., "MUSTER12"),Form_Anzeige(oDlg, oFormular, "MUSTER12" )),""),;
	  EnablePushButtons(drawingarea), SetAppFocus(oDlg) }

oXbp := XbpPushButton():new( oButtons, , {10,724}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "Seite ~2"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| If(NEU_FORM(oDLG, "MUSTER12"),(DisablePushButtons(drawingarea), Form_Anzeige(oDlg, oFormular, "MUSTER12" ), FORM_EDIT(oDlg, oFormular, .T., "MUSTER12"),Form_Anzeige(oDlg, oFormular, "MUSTER12" )),""),;
	  EnablePushButtons(drawingarea), SetAppFocus(oDlg) }


oXbp := XbpPushButton():new( oButtons, , {10,636}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "~Neu"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| If(NEU_FORM(oDLG, "MUSTER12"),(DisablePushButtons(drawingarea), Form_Anzeige(oDlg, oFormular, "MUSTER12" ), FORM_EDIT(oDlg, oFormular, .T., "MUSTER12"),Form_Anzeige(oDlg, oFormular, "MUSTER12" )),""),;
	  EnablePushButtons(drawingarea), SetAppFocus(oDlg) }

oXbp := XbpPushButton():new( oButtons, , {10,592}, {164,44},  { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "Bearbeiten"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DisablePushButtons(drawingarea), FORM_EDIT(oDlg, oFormular, .F., "MUSTER12"),FORM_Anzeige(oDlg, oFormular, "MUSTER12"),  EnablePushButtons(drawingarea),;
		SetAppFocus(oDlg) }

oXbp := XbpPushButton():new( oButtons, ,{10,548}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "~Drucken"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DisablePushButtons(drawingarea), FORM_DRUCK(oDlg, "MUSTER12", oFormular),FORM_Anzeige(oDlg, oFormular, "MUSTER12"),  EnablePushButtons(drawingarea),;
		SetAppFocus(oDlg) }

oXbp := XbpPushButton():new( oButtons, , {10,504}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "Vor"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DBSkip( 1 ), If( PNR # nPNR, DBSkip(-1), (FORM_Anzeige(oDlg, oFormular, "MUSTER12" )) ) }

oXbp := XbpPushButton():new( oButtons, , {10,460}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "Zurck"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DBSkip( -1 ), If( PNR # nPNR, DBSkip(1), If( BOF(), "", (Form_Anzeige(oDlg, oFormular, "MUSTER12" ))) ) }

oXbp := XbpPushButton():new( oButtons, ,{10,416}, {164,44}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "L”schen"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DEL_Formular(oDlg, "MUSTER12"), DBSkip( -1 ), If( PNR # nPNR, DBSkip(1),""), (Form_Anzeige(oDlg, oFormular, "MUSTER12" )) }



oXbp := XbpPushButton():new( oButtons, , {10,372}, {164,44},  { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
oXbp:caption := "~Kopieren"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DisablePushButtons(drawingarea), Form_KOPIE("MUSTER12"), Form_Anzeige(oDlg, oFormular, "MUSTER12" ), FORM_EDIT(oDlg, oFormular,.F., "MUSTER12"),Form_Anzeige(oDlg, oFormular, "MUSTER12" ),;
	 SetAppFocus(oDlg) }


*oXbp := XbpPushButton():new( oButtons, , {10,350}, {164,46}, { { XBP_PP_BGCLR, XBPSYSCLR_BUTTONMIDDLE }, { XBP_PP_FGCLR, -58 }, { XBP_PP_COMPOUNDNAME, "16.Times New Roman" } } )
*oXbp:caption := ""
*oXbp:tabStop := .T.
*oXbp:create()
*oXbp:activate := {|| NIL }

oXbp := XbpPushButton():new( oButtons, , {10,188}, {164,44} )
oXbp:setFontCompoundName( "16.Times New Roman" )
oXbp:caption := "F1 - Hilfe"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| NIL }

oXbp := XbpPushButton():new( oButtons, , {10,144}, {164,44} )
oXbp:setFontCompoundName( "16.Times New Roman" )
oXbp:caption := "F2 - Schoner"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| BS_Schoner() }

oXbpF10 := HBColorButton():new( oButtons, , {10,100}, {164,44})
oXbpF10:caption := "F10 - Spooler"
oXbpF10:setFontCompoundName( "16.Times New Roman" )
oXbpF10:FontColor:= If(PRUEFESPOOL(oDlg),GRA_CLR_DARKGREEN,GRA_CLR_BLACK)
oXbpF10:tabStop := .T.
oXbpF10:create()
oXbpF10:activate := {|| DisablePushButtons(drawingarea), Spool32(oDlg, lDruckStation, lDruckLokal),  EnablePushButtons(drawingarea), SetAppFocus(oDlg) ,;
		oXbpF10:FontColor:=If(PRUEFESPOOL(oDlg),GRA_CLR_DARKGREEN,GRA_CLR_BLACK), oXbpF10:Configure() }

oXbp := XbpPushButton():new( oButtons, , {10,56}, {164,44} )
oXbp:setFontCompoundName( "16.Times New Roman" )
oXbp:caption := "~Einstellungen"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| DisablePushButtons(drawingarea), GE_FORM(oDlg),  EnablePushButtons(drawingarea), SetAppFocus(oDlg) }

oXbp := XbpPushButton():new( oButtons, , {42,8}, {132,46} )
oXbp:setFontCompoundName( "24.Times New Roman" )
oXbp:caption := "Ende"
oXbp:tabStop := .T.
oXbp:create()
oXbp:activate := {|| lExit := .T. }

oDlg:show()
SetAppFocus(oDlg)
oDlg:SetSize({1280,899})
oDlg:Configure()
oDlg:SetSize({1280,900})
oDlg:Configure()
CLEAR TYPEAHEAD
nEvent := xbe_None
DO WHILE ! lExit 
		nEvent := AppEvent( @mp1, @mp2, @oXbp )
		oXbp:handleEvent( nEvent, mp1, mp2 )
		IF nEvent == xbeP_Keyboard 
				Do Case
						case mp1 == 27 // ESC
								lEXIT := .T.
						case mp1 == xbeK_ENTER // Enter
								DisablePushButtons(drawingarea)
								FORM_EDIT(oDlg, oFormular, .F., "Formular" )
								EnablePushButtons(drawingarea)
								SetAppFocus(oDlg)
						case mp1 = xbeK_LEFT // Taste links
								DBSkip( -1 )
								If PNR # nPNR
										DBSkip(1)
								Else
										If ! Bof()
												Form_Anzeige(oDlg, oFormular, "F" )
										Endif
								Endif
						case mp1 = xbeK_RIGHT // Taste rechts
								DBSkip( 1 )
								If PNR # nPNR .OR. EOF()
										DBSkip( -1 )
								Else
										Form_Anzeige(oDlg, oFormular, "F1040" )
								Endif
						case mp1 = xbeK_DEL // Löschen
								DEL_Formular(oDlg, "MUSTER12")
								Form_Anzeige(oDlg, oFormular, "MUSTER12" )
						case mp1 = asc("N") .or. mp1 = asc("n") // NEU
								If NEU_FORM(oDLG, "F1040")
										DisablePushButtons(drawingarea)
										Form_Anzeige(oDlg, oFormular, "F1040" )
										Form_EDIT(oDlg, oFormular, .T., "F1040")
										Form_Anzeige(oDlg, oFormular, "F1040" )
										EnablePushButtons(drawingarea)
										SetAppFocus(oDlg)
								Endif
						case mp1 = asc("D") .or. mp1 = asc("d") // Drucken
								DisablePushButtons(drawingarea)
								FORM_DRUCK(oDlg, "F1040", oFormular)
								FORM_Anzeige(oDlg, oFormular, "F1040")
								EnablePushButtons(drawingarea)
								SetAppFocus(oDlg)
						case mp1 = asc("K") .or. mp1 = asc("k") // Kopie
								DisablePushButtons(drawingarea)
								FORM_KOPIE("F1040")
								Form_Anzeige(oDlg, oFormular, "F1040" )
								FORM_EDIT(oDlg, oFormular,.F., "F1040")
								Form_Anzeige(oDlg, oFormular, "F1040" )
								EnablePushButtons(drawingarea)
								SetAppFocus(oDlg)
						case mp1 = asc("E") .or. mp1 = asc("e") // Einstellungen
								DisablePushButtons(drawingarea)
								GE_FORM(oDlg)
								EnablePushButtons(drawingarea)
								SetAppFocus(oDlg)
						case mp1 = xbeK_F1 // F1
						case mp1 = xbeK_F2 // F2
								BS_Schoner()
						case mp1 = xbeK_F10 // F10
								DisablePushButtons(drawingarea)
								Spool32(oDlg)
								EnablePushButtons(drawingarea)
								SetAppFocus(oDlg)
								oXbpF10:FontColor:=If(PRUEFESPOOL(oDlg),GRA_CLR_DARKGREEN,GRA_CLR_BLACK)
								oXbpF10:Configure()
				Endcase
		Endif
ENDDO
oDlG:Destroy()
_ChkUse(cFormular,.T.)
DBSelectArea( "PATSTAMM" )
SET ORDER To 1
RETURN NIL
Ich habe nun folgendes "Problem":
Beim Starten des Programms erscheint das Formular so:
Bild

Was ich gerne hätte wäre dieses Startverhalten:
Bild

Weiter ist kein Scrollen via Mausrad möglich.

Kennt jemand dieses problem und kann mir weiterhelfen?

Gruß Stefan
Antworten