'100MIO.BAS als kleines Beispiel zur Erläuterung von PB/FORMS 'Alle mit #PBFORMS eingeleiteten Zeilen sind notwendig, damit der ursprünglich 'von PB/FORMS generierte Quelltext nach Bearbeitung durch den Programmierer 'wieder mit PB/FORMS gelesen und verändert werden kann. #PBFORMS Created #COMPILE EXE #DIM ALL #PBFORMS Begin Includes #IF NOT %DEF(%WINAPI) #INCLUDE "WIN32API.INC" #ENDIF #INCLUDE "PBForms.INC" #PBFORMS End Includes '-------------------------------------------------------------------------------- 'Belegung der Konstanten und Deklaration der Funktionen '-------------------------------------------------------------------------------- #PBFORMS Begin Constants %IDD_DIALOG1 = 101 %IDC_LABEL1 = 1001 %IDC_TEXTBOX1 = 1002 %IDC_TEXTBOX2 = 1003 %IDC_BUTTON1 = 1004 %IDC_LABEL2 = 1005 %IDC_BUTTON2 = 1006 %IDCANCEL = 2 #PBFORMS End Constants '-------------------------------------------------------------------------------- DECLARE CALLBACK FUNCTION ShowDIALOG1Proc() DECLARE FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG #PBFORMS Declarations '-------------------------------------------------------------------------------- 'PBMAIN ist in jedem Windows-Programm als Einsprungpunkt notwendig 'In diesem kleinen Beispiel könnte auch ShowDIALOG1 die PBMAIN sein '-------------------------------------------------------------------------------- FUNCTION PBMAIN() ShowDIALOG1 %HWND_DESKTOP END FUNCTION '-------------------------------------------------------------------------------- '-------------------------------------------------------------------------------- 'CallBack-Funktionen enthalten die Behandlung von erwarteten Ereignissen 'hier das Anklicken der Schaltflächen ENDE und MULTIPLIZIEREN '-------------------------------------------------------------------------------- CALLBACK FUNCTION ShowDIALOG1Proc() LOCAL Temp$ LOCAL I& LOCAL F1#, F2#, Erg#, T0#, T1# SELECT CASE CBMSG CASE %WM_COMMAND SELECT CASE CBCTL CASE %IDC_BUTTON1 'Anklicken der 1. Schaltfläche IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN CONTROL GET TEXT CBHNDL,%IDC_TEXTBOX1 TO Temp$ REPLACE "," WITH "." IN Temp$ F1#=VAL(Temp$) CONTROL SET TEXT CBHNDL,%IDC_TEXTBOX1,STR$(F1#) CONTROL GET TEXT CBHNDL,%IDC_TEXTBOX2 TO Temp$ REPLACE "," WITH "." IN Temp$ F2#=VAL(Temp$) CONTROL SET TEXT CBHNDL,%IDC_TEXTBOX2,STR$(F2#) T0#=TIMER FOR I&=1 TO 100000000 Erg# = F1# * F2# NEXT I& T1#=TIMER CONTROL SET TEXT CBHNDL,%IDC_LABEL2, _ "Ergebnis =" & STR$(Erg#) & $CRLF & _ "Rechenzeit in Sekunden: " & FORMAT$(T1#-T0#,"#.###") DIALOG REDRAW CBHNDL END IF CASE %IDCANCEL 'd.h. ENDE-Schaltfläche angeklickt IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN DIALOG END CBHNDL, 0 'Dialog schließen END IF END SELECT END SELECT END FUNCTION '-------------------------------------------------------------------------------- '-------------------------------------------------------------------------------- 'Die Funktion ShowDIALOG1 wird vollständig von PB/FORMS generiert ! 'Dabei wird das neue Fenster mit DIALOG NEW angelegt 'und alle gewünschten Steuerelementen werden hinzugefügt '-------------------------------------------------------------------------------- FUNCTION ShowDIALOG1(BYVAL hParent AS DWORD) AS LONG LOCAL lRslt AS LONG #PBFORMS Begin Dialog %IDD_DIALOG1->-> LOCAL hDlg AS DWORD LOCAL hFont1 AS DWORD LOCAL hFont2 AS DWORD LOCAL hFont3 AS DWORD DIALOG NEW hParent, "100 MIO Projekt", 115, 113, 300, 159, %WS_POPUP OR _ %WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_VISIBLE OR _ %DS_MODALFRAME OR %DS_CENTER OR %DS_3DLOOK OR %DS_NOFAILCREATE OR _ %DS_SETFONT, %WS_EX_WINDOWEDGE OR %WS_EX_CONTROLPARENT OR %WS_EX_LEFT _ OR %WS_EX_LTRREADING OR %WS_EX_RIGHTSCROLLBAR, TO hDlg DIALOG SET COLOR hDlg, RGB(5, 218, 149), RGB(236, 255, 255) CONTROL ADD LABEL, hDlg, %IDC_LABEL1, "PowerBASIC multipliziert zwei " + _ "doppeltgenaue 64-bit Fließkommazahlen in einer Schleife " + _ "einhundertmillionenmal hintereinander und stellt fest, wie lange dies " + _ "dauert.", 10, 5, 280, 40, %WS_CHILD OR %WS_VISIBLE OR %SS_CENTER, _ %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL SET COLOR hDlg, %IDC_LABEL1, %BLACK, RGB(236, 255, 255) CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, "hier 1. Faktor eintippen", 15, _ 50, 110, 15 CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX2, "hier 2. Faktor eintippen", 15, _ 70, 110, 15 CONTROL ADD BUTTON, hDlg, %IDC_BUTTON1, "100.000.000-mal multiplizieren !", _ 135, 70, 150, 15, %WS_CHILD OR %WS_VISIBLE OR %WS_TABSTOP OR %BS_TEXT _ OR %BS_PUSHBUTTON OR %BS_NOTIFY OR %BS_CENTER OR %BS_VCENTER, _ %WS_EX_LEFT OR %WS_EX_LTRREADING CONTROL ADD LABEL, hDlg, %IDC_LABEL2, "Bitte geben Sie in die Eingabefelder " + _ "die zu multiplizierenden Zahlen ein und starten Sie die Berechnung " + _ "durch einen Mausklick auf die Schaltfläche." & $CRLF & $CRLF & _ "Wie lange wird es nach Ihrer Schätzung dauern?", 15, 95, 270, 40 CONTROL SET COLOR hDlg, %IDC_LABEL2, -1, RGB(236, 255, 255) CONTROL ADD BUTTON, hDlg, %IDCANCEL, "ENDE", 235, 140, 50, 15, %WS_CHILD OR _ %WS_VISIBLE OR %WS_TABSTOP OR %BS_TEXT OR %BS_PUSHBUTTON OR %BS_NOTIFY _ OR %BS_CENTER OR %BS_VCENTER, %WS_EX_LEFT OR %WS_EX_LTRREADING hFont1 = PBFormsMakeFont("Papyrus", 10, 700, %FALSE, %FALSE, %FALSE, %ANSI_CHARSET) hFont2 = PBFormsMakeFont("MS Sans Serif", 10, 400, %FALSE, %FALSE, %FALSE, %ANSI_CHARSET) hFont3 = PBFormsMakeFont("MS Sans Serif", 10, 700, %FALSE, %FALSE, %FALSE, %ANSI_CHARSET) CONTROL SEND hDlg, %IDC_LABEL1, %WM_SETFONT, hFont1, 0 CONTROL SEND hDlg, %IDC_TEXTBOX1, %WM_SETFONT, hFont2, 0 CONTROL SEND hDlg, %IDC_TEXTBOX2, %WM_SETFONT, hFont2, 0 CONTROL SEND hDlg, %IDC_BUTTON1, %WM_SETFONT, hFont3, 0 #PBFORMS End Dialog 'Bringt den Dialog auf den Bildschirm und überwacht Ergeignisse DIALOG SHOW MODAL hDlg, CALL ShowDIALOG1Proc TO lRslt DeleteObject hFont1 DeleteObject hFont2 DeleteObject hFont3 FUNCTION = lRslt END FUNCTION '--------------------------------------------------------------------------------