Scrollbares Formular

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Unsere Datenschutzerklärung wurde aktualisiert. Mit der Nutzung unseres Forums akzeptierst Du unsere Datenschutzerklärung. Du bestätigst zudem, dass Du mindestens 16 Jahre alt bist.

    • Scrollbares Formular

      Weiß jemand, wie man sowas scrollbar bekommt ?

      Quellcode

      1. Declare Long x, y, Handle Texte[], Edits[], Buttons[]
      2. Declare hsv&,hsh&,htx&
      3. Window 600, 390
      4. hsh& = @Create("HScroll",%hwnd,"", 2, 300, 560, 22)
      5. hsv& = @Create("VScroll",%hwnd,"", 560, 2, 580, 310)
      6. SetScrollRange hsh&, 2, 550 'x-pos scrollbereich
      7. SetScrollRange hsv&, 2, 350 'y-pos scrollbereich
      8. x = 10
      9. y = 10
      10. WhileLoop 0, 19
      11. Texte[&LOOP] = Create("Text", %HWnd, Str$(&LOOP + 1) + ". Eingabe :", x, y, 100, 25)
      12. Edits[&LOOP] = Create("Edit", %HWnd, "", x + 110, y, 60, 25)
      13. Buttons[&LOOP] = Create("Button",%HWnd, Str$(&LOOP), x + 200, y, 60, 25)
      14. Inc y, 40
      15. EndWhile
      16. While 1
      17. WaitInput
      18. EndWhile
      19. End
      Alles anzeigen
      Die Scrollbalken gibt es ja. Das Fenster sollte auch nicht größer sein.
    • Scrollen finde ich da unpraktisch, ich würde einfach weitere Fenster aufmachen und exakt drüberlegen (OK, dem Fuchs waren hier die Trauben "zu sauer").

      Von Thomas Freier - modifiziert durch Matthias Arlt, gab´s da mal ein editierbares Scroll-Grid, vielleicht könnte man sich daraus das Scrollen abschauen...
      Gruss

      Quellcode

      1. 'Es wird nicht der standardmäßige Inplace-Editor der Listview genutzt.
      2. 'Dieser würde nur für die erste Spalte zur Verfügung stehen...
      3. 'Original-Source Thomas Freier - modifiziert Matthias Arlt
      4. Window 0,0 - 600,410
      5. declare LV&,Spalte&,Zeile&,Item&,Edit&,Font&,Txt$
      6. declare rect#,cellpos_x%,cellpos_y%,cellwidth%,cellheight%
      7. Font&=CreateFont("Verdana",16,0,0,0,0)
      8. SetDialogFont Font&
      9. LV&=Create("GridBox",%hwnd,\
      10. "Spalte 1;1;60;Spalte 2;1;120;Spalte 3;1;80;Spalte 4;1;80;Spalte 5;1;80",0,10,10,460,250)
      11. SetFont LV&,Font&
      12. whileloop 0,20
      13. Addstring(LV&,str$(&loop) + "|0|0|0|0")
      14. wend
      15. Edit& = create("Edit",LV&,"",0,0,0,0)
      16. setfont Edit&,Font&
      17. proc SetSubItemEdit
      18. dim rect#,16
      19. SendMessage(LV&,$100E,Zeile&,rect#) 'LVM_GETITEMRECT
      20. cellpos_x% = long(rect#,0)
      21. cellpos_y% = long(rect#,4) - 1
      22. cellwidth% = sendmessage(LV&,$101D,Spalte&,0)
      23. cellheight% = (long(rect#,12) - long(rect#,4)) + 1
      24. if Spalte& > 0
      25. whileloop 0,(Spalte& - 1),1
      26. cellpos_x% = cellpos_x% + sendmessage(LV&,$101D,&loop,0)
      27. wend
      28. endif
      29. dispose rect#
      30. settext Edit&, Txt$
      31. setwindowpos Edit& = cellpos_x%,cellpos_y% - cellwidth%,cellheight%
      32. setfocus(Edit&)
      33. 'SendMessage(Edit&,"+({END})") 'Cursor ans Ende setzen...
      34. SendMessage(Edit&,$B1,0,-1)'oder Alles markieren... (Explorer-konform)
      35. endproc
      36. AddHotKey 13, 13, 0
      37. AddHotKey 37, 37, 0
      38. AddHotKey 38, 38, 0
      39. AddHotKey 39, 39, 0
      40. AddHotKey 40, 40, 0
      41. SubClass %hwnd, 1
      42. usermessages 2000
      43. SubClassProc
      44. if SubClassMessage(%hwnd, 78)'WM_NOTIFY
      45. if (Long(&sLParam,8) = -3)
      46. Item&=Long(&sLParam,12)
      47. if (Item& <> -1)
      48. SendMessage(%hwnd,2000,Item&,Long(&sLParam,16))
      49. endif
      50. elseif (Long(&sLParam,8) = -180)'LVN_BEGINSCROLL
      51. settext LV&,Zeile&,Spalte&,gettext$(Edit&)
      52. setwindowpos Edit& = 0,0-0,0
      53. endif
      54. endif
      55. endproc
      56. while 1
      57. waitinput
      58. if (%umessage = 2000)
      59. Txt$ = GetText$(LV&,&uwparam,&ulparam)
      60. Spalte&= &ulparam
      61. Zeile&= &uwparam
      62. SetSubItemEdit
      63. while getfocus(Edit&)
      64. waitinput
      65. if (%menuitem = 13)
      66. break
      67. elseif (%menuitem = 37) | (%menuitem = 38) | (%menuitem = 39) | (%menuitem = 40)
      68. settext LV&,Zeile&,Spalte&,gettext$(Edit&)
      69. case (%menuitem = 37) : Spalte& = (Spalte& - 1)
      70. case (%menuitem = 38) : Zeile& = (Zeile& - 1)
      71. case (%menuitem = 39) : Spalte& = (Spalte& + 1)
      72. case (%menuitem = 40) : Zeile& = (Zeile& + 1)
      73. Txt$ = GetText$(LV&,Zeile&,Spalte&)
      74. SetSubItemEdit
      75. endif
      76. wend
      77. settext LV&,Zeile&,Spalte&,gettext$(Edit&)
      78. setwindowpos Edit& = 0,0-0,0
      79. setfocus(%hwnd)
      80. endif
      81. wend
      82. usermessages 0
      83. SubClass %hwnd, 0
      84. end
      Alles anzeigen
    • Hallo Heinz,

      was speziell das Scrollen von Controls angeht, bin ich Dank einer Anregung von Andreas Miethe (Gruß nach oben...) und etwas MSDN
      auf dieses hier gekommen. Zumindest hab ich nix ähnliches in unseren Foren gefunden.
      Es wird eine Systemscrollbar genutzt, und alle drei Scrollarten (Linescroll, Pagescroll und Thumbtrackscroll) funktionieren
      bei mir wunderbar. Die Größe des Thumb spiegelt dabei das Verhältnis des sichtbaren zum gesamten Bereich wider.
      Vielleicht hat jemand aber auch noch wichtige Hinweise oder Verbesserungen dazu.

      Gruß
      KJ

      Brainfuck-Quellcode

      1. 'Aufgabe: Es sollen 3 Seiten eines Fensters mit Controls vertikal scrollbar sein.
      2. $H Windows.ph
      3. $H Messages.ph
      4. Def &INKLUSIVE_REDRAW 1
      5. Declare long ende
      6. Declare handle txt1, txt2, txt3, txt4, pic
      7. Declare long cWidth, cHeight, comparePos, step, linestep
      8. '---------------------------------------------------------------------------
      9. Declare SI#
      10. Struct SCROLLINFO = cbSize&, fMask&, nMin&, nMax&, nPage&, nPos&, nTrackPos&
      11. Dim SI#, SCROLLINFO
      12. '---------------------------------------------------------------------------
      13. CLS Rgb(50, 50, 50)
      14. 'Ein Fenster definieren
      15. var handle PANEL = Create("ChildWindow", &hWnd, "", 0, 0, 300, Height(&hWnd))
      16. 'Stil ändern: Rahmenloses Panel mit vertikaler Scrollbar erzeugen
      17. SetStyle PANEL, $50600000
      18. 'Sicherheitshalber, da unter gewissen Umständen der neue Stil nicht sichtbar wird:
      19. ~SetWindowPos(PANEL, ~HWND_TOP, 0, 0, 0, 0, ~SWP_FRAMECHANGED | ~SWP_NOMOVE | ~SWP_NOSIZE)
      20. cWidth = Width(PANEL) : cHeight = Height(PANEL)
      21. '---------------------------------------------------------------------------
      22. 'Ein paar Controls, damit man auch was sieht:
      23. pic =Create("hNewPic", 170, 90, Rgb(70,70,200))
      24. Create("Bitmap", PANEL, pic, 60, 160)
      25. txt1 = Create("text", PANEL, "Seite 1 / 3 (scroll mich)",50, 0 * cHeight, 200, 16)
      26. txt2 = Create("text", PANEL, "Seite 2 / 3 (scroll mich)",50, 1 * cHeight, 200, 16)
      27. txt3 = Create("text", PANEL, "Seite 3 / 3 (scroll mich)",50, 2 * cHeight, 200, 16)
      28. txt4 = Create("text", PANEL, "Schluß mit Scrollen", 80, 3 * cHeight -16, 200, 16)
      29. Create("MultiEdit",PANEL,"ABC\nDEF\nGHI\nJKL\nMNO\nPQR", 70, 170, 150, 70)
      30. '---------------------------------------------------------------------------
      31. 'Da die Texte 16 Pixel hoch sind, soll 16 auch der minimalste Scrolleffekt sein.
      32. linestep = 16
      33. '---------------------------------------------------------------------------
      34. ' Vertikale Scrollbar initialisieren
      35. SI#.cbSize& = SizeOf(SI#)
      36. SI#.fMask& = ~SIF_ALL 'Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.
      37. SI#.nMin& = 1
      38. SI#.nMax& = cHeight *3 'Drei Seiten sollen scrollbar sein
      39. SI#.nPage& = cHeight 'Erlaubter Bereich 0 bis (SI#.nMax& - SI#.nMin& +1)
      40. SI#.nPos& = 1
      41. SI#.nTrackPos& = 1
      42. ~SetScrollInfo(PANEL, ~SB_VERT, SI#, &INKLUSIVE_REDRAW)
      43. '---------------------------------------------------------------------------
      44. SubclassProc
      45. Declare pointer wp
      46. If SubclassMessage(PANEL, ~WM_VSCROLL)
      47. wp = LoWord(&swparam)
      48. Select wp
      49. CaseOf ~SB_LINEDOWN
      50. SI#.fMask& = ~SIF_ALL
      51. ~GetScrollInfo(PANEL, ~SB_VERT, SI#)
      52. SI#.nPos& = SI#.nPos& + linestep
      53. Case SI#.nPos& > (SI#.nMax& - SI#.nPage& + 1) : SI#.nPos& = (SI#.nMax& - SI#.nPage& + 1)
      54. CaseOf ~SB_LINEUP
      55. SI#.fMask& = ~SIF_ALL
      56. ~GetScrollInfo(PANEL, ~SB_VERT, SI#)
      57. SI#.nPos& = SI#.nPos& - linestep
      58. Case SI#.nPos& < SI#.nMin& : SI#.nPos& = SI#.nMin&
      59. CaseOf ~SB_PAGEUP
      60. SI#.fMask& = ~SIF_ALL
      61. ~GetScrollInfo(PANEL, ~SB_VERT, SI#)
      62. SI#.nPos& = SI#.nPos& - SI#.nPage&
      63. Case SI#.nPos& < SI#.nMin& : SI#.nPos& = SI#.nMin&
      64. CaseOf ~SB_PAGEDOWN
      65. SI#.fMask& = ~SIF_ALL
      66. ~GetScrollInfo(PANEL, ~SB_VERT, SI#)
      67. SI#.nPos& = SI#.nPos& + SI#.nPage&
      68. Case SI#.nPos& > (SI#.nMax& - SI#.nPage& + 1) : SI#.nPos& = (SI#.nMax& - SI#.nPage& + 1)
      69. CaseOf ~SB_THUMBTRACK
      70. SI#.fMask& = ~SIF_TRACKPOS
      71. ~GetScrollInfo(PANEL, ~SB_VERT, SI#)
      72. SI#.nPos& = SI#.nTrackPos&
      73. EndSelect
      74. SI#.fMask& = ~SIF_POS
      75. ~SetScrollInfo(PANEL, ~SB_VERT, SI#, &INKLUSIVE_REDRAW)
      76. step = comparePos - SI#.nPos&
      77. comparePos = SI#.nPos&
      78. ~ScrollWindowEx(PANEL, 0, step, 0, 0, 0, 0, ~SW_SCROLLCHILDREN | ~SW_INVALIDATE | ~SW_ERASE)
      79. EndIf
      80. EndProc
      81. '---------------------------------
      82. Subclass PANEL,1
      83. UserMessages $10
      84. '---------------------------------
      85. WhileNot Ende
      86. WaitInput
      87. If %UMessage = $10
      88. Ende = 1
      89. Shutdown
      90. EndIf
      91. EndWhile
      92. '---------------------------------
      93. Proc Shutdown
      94. DeleteObject pic
      95. Subclass PANEL,0
      96. Dispose SI#
      97. EndProc
      98. End
      Alles anzeigen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von ts-soft ()

    • XProfan-11.2a-Retrofit anbei, mit der nachträglichen Bitte um OK.
      Spoiler anzeigen

      Brainfuck-Quellcode

      1. ' SCROLL CONTROL von KJH (Orig. X4) auf Basis einer Idee des zu früh gegangenen A.Miethe)
      2. ' Nach XPROFAN-11.2a rücktranskribiert by P.Specht 2018-12-09, in ehrendem Gedenken.
      3. ' Aufgabe: Es sollen 3 Seiten eines Fensters mit Controls vertikal scrollbar sein.
      4. $H Windows.ph
      5. $H Messages.ph
      6. Def &INKLUSIVE_REDRAW 1
      7. Declare ende&
      8. Declare txt1&, txt2&, txt3&, txt4&, pic&
      9. Declare cWidth&, cHeight&, comparePos&, step&, linestep&
      10. '---------------------------------------------------------------------------
      11. Declare SI#
      12. Struct SCROLLINFO = cbSize&, fMask&, nMin&, nMax&, nPage&, nPos&, nTrackPos&
      13. Dim SI#, SCROLLINFO
      14. '---------------------------------------------------------------------------
      15. WindowTitle "SCROLL A SCROLL CONTROL"
      16. CLS Rgb(50, 50, 50)
      17. 'Ein Fenster definieren
      18. var PANEL& = Create("ChildWindow", %hWnd, "", 0, 0, 300, Height(%hWnd))
      19. 'Stil ändern: Rahmenloses PANEL& mit vertikaler Scrollbar erzeugen
      20. SetStyle PANEL&, $50600000
      21. 'Sicherheitshalber, da unter gewissen Umständen der neue Stil nicht sichtbar wird:
      22. ~SetWindowPos(PANEL&, ~HWND_TOP, 0, 0, 0, 0, ~SWP_FRAMECHANGED | ~SWP_NOMOVE | ~SWP_NOSIZE)
      23. cWidth& = Width(PANEL&) : cHeight& = Height(PANEL&)
      24. '---------------------------------------------------------------------------
      25. 'Ein paar Controls, damit man auch was sieht:
      26. pic& = Create("hNewpic", 170, 90, Rgb(70,70,200))
      27. Create("Bitmap", PANEL&, pic&, 60, 160)
      28. txt1& = Create("text", PANEL&, "Seite 1 / 3 (scroll mich)",50, 0 * cHeight&, 200, 16)
      29. txt2& = Create("text", PANEL&, "Seite 2 / 3 (scroll mich)",50, 1 * cHeight&, 200, 16)
      30. txt3& = Create("text", PANEL&, "Seite 3 / 3 (scroll mich)",50, 2 * cHeight&, 200, 16)
      31. txt4& = Create("text", PANEL&, "Schluß mit Scrollen", 80, 3 * cHeight& -16, 200, 16)
      32. Create("MultiEdit",PANEL&,"ABC\nDEF\nGHI\nJKL\nMNO\nPQR", 70, 170, 150, 70)
      33. '---------------------------------------------------------------------------
      34. 'Da die Texte 16 Pixel hoch sind, soll 16 auch der minimalste Scrolleffekt sein.
      35. linestep& = 16
      36. '---------------------------------------------------------------------------
      37. ' Vertikale Scrollbar initialisieren
      38. SI#.cbSize& = SizeOf(SI#)
      39. SI#.fMask& = ~SIF_ALL 'Combination of SIF_PAGE, SIF_POS, SIF_RANGE, and SIF_TRACKPOS.
      40. SI#.nMin& = 1
      41. SI#.nMax& = cHeight& *3 'Drei Seiten sollen scrollbar sein
      42. SI#.nPage& = cHeight& 'Erlaubter Bereich 0 bis (SI#.nMax& - SI#.nMin& +1)
      43. SI#.nPos& = 0
      44. SI#.nTrackPos& = 0
      45. ~SetScrollInfo(PANEL&, ~SB_VERT, SI#, &INKLUSIVE_REDRAW)
      46. '---------------------------------------------------------------------------
      47. SubclassProc
      48. Declare wp&
      49. If SubclassMessage(PANEL&, ~WM_VSCROLL)
      50. wp& = LoWord(&swparam)
      51. Select wp&
      52. CaseOf ~SB_LINEDOWN
      53. SI#.fMask& = ~SIF_ALL
      54. ~GetScrollInfo(PANEL&, ~SB_VERT, SI#)
      55. SI#.nPos& = SI#.nPos& + linestep&
      56. Case SI#.nPos& > (SI#.nMax& - SI#.nPage& + 1) : SI#.nPos& = (SI#.nMax& - SI#.nPage& + 1)
      57. CaseOf ~SB_LINEUP
      58. SI#.fMask& = ~SIF_ALL
      59. ~GetScrollInfo(PANEL&, ~SB_VERT, SI#)
      60. SI#.nPos& = SI#.nPos& - linestep&
      61. Case SI#.nPos& < SI#.nMin& : SI#.nPos& = SI#.nMin&
      62. CaseOf ~SB_PAGEUP
      63. SI#.fMask& = ~SIF_ALL
      64. ~GetScrollInfo(PANEL&, ~SB_VERT, SI#)
      65. SI#.nPos& = SI#.nPos& - SI#.nPage&
      66. Case SI#.nPos& < SI#.nMin& : SI#.nPos& = SI#.nMin&
      67. CaseOf ~SB_PAGEDOWN
      68. SI#.fMask& = ~SIF_ALL
      69. ~GetScrollInfo(PANEL&, ~SB_VERT, SI#)
      70. SI#.nPos& = SI#.nPos& + SI#.nPage&
      71. Case SI#.nPos& > (SI#.nMax& - SI#.nPage& + 1) : SI#.nPos& = (SI#.nMax& - SI#.nPage& + 1)
      72. CaseOf ~SB_THUMBTRACK
      73. SI#.fMask& = ~SIF_TRACKPOS
      74. ~GetScrollInfo(PANEL&, ~SB_VERT, SI#)
      75. SI#.nPos& = SI#.nTrackPos&
      76. EndSelect
      77. SI#.fMask& = ~SIF_POS
      78. ~SetScrollInfo(PANEL&, ~SB_VERT, SI#, &INKLUSIVE_REDRAW)
      79. step& = comparePos& - SI#.nPos&
      80. comparePos& = SI#.nPos&
      81. ~ScrollWindowEx(PANEL&, 0, step&, 0, 0, 0, 0, ~SW_SCROLLCHILDREN | ~SW_INVALIDATE | ~SW_ERASE)
      82. EndIf
      83. EndProc
      84. '---------------------------------
      85. Subclass PANEL&,1
      86. UserMessages $10
      87. '---------------------------------
      88. WhileNot ende&
      89. WaitInput
      90. If %UMessage = $10
      91. ende& = 1
      92. Shutdown
      93. EndIf
      94. EndWhile
      95. '---------------------------------
      96. Proc Shutdown
      97. DeleteObject pic&
      98. Subclass PANEL&,0
      99. Dispose SI#
      100. EndProc
      101. End
      Alles anzeigen


    • Ein unschöner Nachlässigkeitsfehler meinerseits im Code, bei der Initialisierung der Scrollbar,
      (den Windows aber offenbar automatisch korrigiert):

      Da SI#.nMin& = 1 gesetzt ist, (also gewollt nicht nullbasiert)
      sollten SI#.nPos& und SI#.nTrackPos& natürlich auch mindestens auf 1 gesetzt werden.

      Leider fand ich eben keine Möglichkeit, den Post zwecks Korrektur erneut zu bearbeiten, aber ich schau nochmal.

      Gruß
      KJ
    • KJH schrieb:

      Leider fand ich eben keine Möglichkeit, den Post zwecks Korrektur erneut zu bearbeiten, aber ich schau nochmal.
      Wenn die Zeit zum überarbeiten um ist, dann kannst Du Dich immer noch an einem "anwesenden" Moderator wenden und dem den überarbeiteten Code zum Einfügen geben, per Konversation! Ich bin gerne bereit dies für Dich zu tun, vorausgesetzt ich bin anwesend.
      Gruß Thomas
      Meine Hardware
      ƃᴉɹǝᴉʍɥɔs ʇsᴉ ɥɔɐɟuᴉǝ
      ComputerInfo für PPF