PowerBASIC FORUM - Kirschbaum Software GmbH UBB.threads™ copyright by Infopop Corporation.

Hier helfen sich PowerBASIC Programmierer gegenseitig ..... >> Nützlicher PowerBASIC Quellcode

Seiten in diesem Thema: 1
Josef KirschbaumAdministrator
Moderator

Registriert: 15.12.2002
Beiträge: 342
Wohnort: Emmering
PB/WIN 9: SCROLLBAR (horizontal) ohne SCROLLINFO
      #2855 - 01.02.2010 18:18

Für PowerBASIC for Windows stehen ab der Version 9.0 verschiedene Befehle SCROLLBAR GET/SET .... neu zur Verfügung.

Bei kritischer Betrachtung kann man zwar feststellen, dass alle Möglichkeiten dieser neuen Befehle bereits bei früheren PB/WIN-Versionen durch entsprechende WIN32API-Aufrufe gegeben waren. Somit ergänzen diese neuen DDT-Befehle lediglich die vielen weiteren DDT-Befehle, mit denen PB/WIN schon in den Versionen 8 und 9 erweitert wurde. Auch bei früheren Befehls-Erweiterungen (z.B. für Drucken und Grafik) gab es schon ähnliche Situationen, wo früher nur durch API-Aufrufe mögliche Aktionen durch neue DDT-Befehle vereinfacht wurden.

Wer also seine Programme gerne von den oftmals ungeliebten WIN32API-Aufrufen freihalten möchte, kann mit den neuen SCROLLBAR-Befehlen ohne die bisher notwendige SCROLLINFO-Struktur und ohne die bisher üblichen Funktionsaufrufe SetScrollInfo() und GetScrollInfo() auskommen.

Nachdem mit PowerBASIC for Windows 9 kein Anwendungsbeispiel für die neuen SCROLLBAR-Befehle mitliefert wird, möchte ich mit meinem folgenden kleinen Demoprogramm zeigen, wie eine Umsetzung ohne SCROLLINFO-Struktur aussehen könnte.

Wer sich ausführlicher über das Steuerelement SCROLLBAR informieren möchte, findet im Internet in der Microsoft MSDN weitaus umfangreichere Informationen. Allerdings berücksichtigt Microsoft innerhalb der MSDN nicht die Möglichkeiten von PowerBASIC PB/WIN und empfiehlt schon deshalb die sonst übliche SCROLLINFO-Struktur zur Behandlung der durch SCROLLBAR ausgelösten Ereignisse.

ACHTUNG: Mir ist aufgefallen, dass in Programmbeispielen im Internet der mögliche Laufbereich immer wieder falsch festgelegt wird. Die Positionen auf der Laufleiste werden durch den linken Rand der Marke (thumb) festgelegt. Arbeitet man mit einer etwas breiteren Marke (d.h. > 1), so ist bei der Festlegung des rechten Randes (SET RANGE) die Breite der Marke zum maximal gewünschten Wert hinzuzufügen (wie hier im Beispiel: HScrollPosMax& + HScrollPage& - 1&).

Code:
'Demo SCROLLBAR für PB/WIN ab Version 9.0

'nur mit PowerBASIC DDT-Befehlen
'ohne SCROLLINFO, ohne WIN32API-Funktionsaufrufe
'Autor: Josef Kirschbaum
'http://www.powerbasic.de

#COMPILE EXE
#DIM ALL

'------------------------------------------------------------------------------
%IDD_DIALOG1 = 101
%IDC_SCROLLBAR1 = 1001
%IDC_BUTTON1 = 1002
%IDC_BUTTON2 = 1003
%IDC_LABEL1 = 1004
%IDC_LABEL2 = 1005
%IDC_LABEL3 = 1006
%IDC_LABEL4 = 1007
%IDC_LABEL5 = 1008
%IDC_LABEL6 = 1009
%IDC_LABEL7 = 1010

'------------------------------------------------------------------------------
CALLBACK FUNCTION ShowDIALOG1Proc()
STATIC HScrollPosMin AS LONG
STATIC HScrollPosMax AS LONG
STATIC HScrollPage AS LONG
STATIC HScrollLine AS LONG
STATIC HScrollPos AS LONG

SELECT CASE AS LONG CB.MSG

CASE %WM_INITDIALOG 'Setzen der Voreinstellungen

HScrollPosMin&=256&
HScrollPosMax&=512&
HScrollPage&=(HScrollPosMax&-HScrollPosMin&)/10&
HScrollLine&=(HScrollPosMax&-HScrollPosMin&)/100&

SCROLLBAR SET RANGE CB.HNDL, %IDC_SCROLLBAR1, HScrollPosMin&, HScrollPosMax& + HScrollPage& - 1&
SCROLLBAR SET PAGESIZE CB.HNDL, %IDC_SCROLLBAR1, HScrollPage&

CONTROL SET TEXT CB.HNDL, %IDC_LABEL1, STR$(HScrollPosMin&)
CONTROL SET TEXT CB.HNDL, %IDC_LABEL3, STR$(HScrollPosMax&)
SCROLLBAR GET POS CB.HNDL, %IDC_SCROLLBAR1 TO HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)
CONTROL SET TEXT CB.HNDL, %IDC_LABEL4, "Scrollbar position min.: "+STR$(HScrollPosMin&)
CONTROL SET TEXT CB.HNDL, %IDC_LABEL5, "Scrollbar position max.: "+STR$(HScrollPosMax&)
CONTROL SET TEXT CB.HNDL, %IDC_LABEL6, "Scrollbar page size: "+STR$(HScrollPage&)
CONTROL SET TEXT CB.HNDL, %IDC_LABEL7, "Scrollbar line step: "+STR$(HScrollLine&)

CASE %WM_HSCROLL 'Ereignisauswertung horizontale Scrollbar
'ACHTUNG: Auswertung erfolgt nicht über %WM_COMMAND!

SELECT CASE AS LONG CB.CTL

CASE %SB_LEFT 'HOME
HScrollPos& = HScrollPosMin&
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1 , HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_RIGHT 'END
HScrollPos& = HScrollPosMax&
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1 , HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_LINELEFT 'Cursor links
HScrollPos& = MAX&(HScrollPos& - HScrollLine&, HScrollPosMin&)
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1, HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_LINERIGHT 'Cursor rechts
HScrollPos& = MIN&(HScrollPos& + HScrollLine&, HScrollPosMax&)
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1, HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_PAGELEFT 'Page up
HScrollPos& = MAX&(HScrollPos& - HScrollPage&, HScrollPosMin&)
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1, HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_PAGERIGHT 'Page down
HScrollPos& = MIN&(HScrollPos& + HScrollPage&, HScrollPosMax&)
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1, HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_THUMBPOSITION
'Endposition nach dem Ziehen der Marke mit der Maus
SCROLLBAR GET TRACKPOS CB.HNDL, %IDC_SCROLLBAR1 TO HScrollPos&
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1, HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

CASE %SB_THUMBTRACK
'Zwischenpositionen beim Ziehen der Marke mit der Maus
SCROLLBAR GET TRACKPOS CB.HNDL, %IDC_SCROLLBAR1 TO HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)

END SELECT

CASE %WM_COMMAND

SELECT CASE AS LONG CB.CTL

CASE %IDC_BUTTON1 'Schaltfläche SB_MIN
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
HScrollPos& = HScrollPosMin&
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1 , HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)
END IF

CASE %IDC_BUTTON2 'Schaltfläche SB_MAX
IF CB.CTLMSG = %BN_CLICKED OR CB.CTLMSG = 1 THEN
HScrollPos& = HScrollPosMax&
SCROLLBAR SET POS CB.HNDL, %IDC_SCROLLBAR1 , HScrollPos&
CONTROL SET TEXT CB.HNDL, %IDC_LABEL2, STR$(HScrollPos&)
END IF

END SELECT

END SELECT

END FUNCTION

'------------------------------------------------------------------------------
FUNCTION PBMAIN()

LOCAL hDlg AS DWORD

DIALOG NEW 0, "SCROLLBAR GET/SET ...... - Demo", , , 250, 160, %WS_SYSMENU, TO hDlg

CONTROL ADD SCROLLBAR, hDlg, %IDC_SCROLLBAR1, "", 10, 95, 225, 10
CONTROL SET COLOR hDlg, %IDC_SCROLLBAR1, -1&, %RGB_MIDNIGHTBLUE

CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "SB_MIN", 10, 115, 50, 15
CONTROL ADD BUTTON, hDlg, %IDC_BUTTON2, "SB_MAX", 185, 115, 50, 15
CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "", 5, 80, 40, 10
CONTROL ADD LABEL, hDlg, %IDC_LABEL2, "", 105, 80, 40, 11, %SS_CENTER
CONTROL ADD LABEL, hDlg, %IDC_LABEL3, "", 200, 80, 40, 10, %SS_RIGHT
CONTROL ADD LABEL, hDlg, %IDC_LABEL4, "", 10, 10, 100, 10
CONTROL ADD LABEL, hDlg, %IDC_LABEL5, "", 10, 23, 100, 10
CONTROL ADD LABEL, hDlg, %IDC_LABEL6, "", 10, 36, 100, 10
CONTROL ADD LABEL, hDlg, %IDC_LABEL7, "", 10, 49, 100, 10

DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc

END FUNCTION



Extras: Beitrag drucken   Auf den Merkzettel   Moderator benachrichtigen  
Seiten in diesem Thema: 1


Statistiken
2 registrierte Benutzer und 5 Besucher in diesem Forum.

Moderator:  Josef Kirschbaum 

Thema drucken

Rechte
      Sie können keine neuen Themen erstellen
      Sie können keine neuen Antworten erstellen
      HTML ist deaktiviert
      UBBCode ist aktiviert

Bewertung:
Thema gelesen: 488

Bewerten Sie dieses Thema
 
Sprung zu

Kontaktformular | Datenschutzerklärung zur PowerBASIC Startseite



UBB.threads™ 6.2.1