ytwinky
Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 05.01.2006, 19:05 Titel: InputBox in FB unter Windows |
|
|
Meine Versuche, eine InputBox a la VBScript zu bekommen, waren nicht immer von
Erfolg gekrönt(Manch einer kann sich nun mal nicht vorstellen, daß FB nicht nur
zu Konsolen-Programmierung nützlich ist )
Anyway, im freebasic.net/forum hatte ich Glück und fand nicht nur den nötigen
Code(thx @jofers), sondern auch kompetente Hilfe aus der Nähe vom WeißwurstÄquator
(thx a lot @dkl ). Dies wird kein Tutorium über das Erstellen von .rc-Dateien
(kann auch nicht, denn dazu müßte ich dies Thema BEHERRSCHEN ), deshalb gleich
medias in res mit der inputbox.rc-Datei: Code: | #define IDC_TEXT 1461
#define IDC_LABEL 1462
#define IDD_INPUTBOX 100
IDD_INPUTBOX DIALOGEX 100, 100, 200, 62
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |
WS_SYSMENU
CAPTION "InputBox"
FONT 9, "MS Shell Dlg", 400, 0
{
EDITTEXT IDC_TEXT, 5, 46, 190, 12, ES_AUTOHSCROLL,
LTEXT "Veuillez svp mettre votre text ici(rofl):", IDC_LABEL, 5, 3, 150, 41
DEFPUSHBUTTON "OK", IDOK, 155, 5, 40, 14, BS_FLAT
PUSHBUTTON "Cancel", IDCANCEL, 155, 21, 40, 14, BS_FLAT
} |
Diese Datei kann dann von InputBox.Bas benutzt werden: Code: | #define IDC_TEXT 1461
#define IDC_LABEL 1462
#define IDD_INPUTBOX 100
Type InputDialogMessage
Title As String
Text As String
InputBox_Left As Integer
InputBox_Top As Integer
End Type
Function InputBoxProc(ByVal hwndDlg As HWND, ByVal uMsg As UINT, _
ByVal wParam As WPARAM, ByVal lParam As LPARAM) As LRESULT
Dim InputDialogMessage As InputDialogMessage Ptr
Dim MessagePtr As LPTSTR
Dim rct as RECT
Select Case uMsg
Case WM_INITDIALOG
InputDialogMessage = cPtr(InputDialogMessage Ptr, lParam)
SetDlgItemText hwndDlg, IDC_LABEL, StrPtr(InputDialogMessage->Text)
SendMessage hwndDlg, WM_SETTEXT, NULL, cast(WPARAM, StrPtr(InputDialogMessage->Title))
GetWindowRect(hwndDlg, @rct)
MoveWindow(hwndDlg, InputDialogMessage->InputBox_Left, InputDialogMessage->InputBox_Top, _
rct.Right-rct.Left, rct.Bottom-rct.Top, TRUE)
Case WM_COMMAND
Select Case LoWord(wParam)
Case IDOK
MessagePtr=cAllocate(255)
GetDlgItemText hwndDlg, IDC_TEXT, MessagePtr, 255
EndDialog hwndDlg, cast(integer, MessagePtr)
Case IDCANCEL
EndDialog hwndDlg, 0
End Select
End Select
End Function
Function InputBox (ByVal Text As String, ByVal Title As String, ByVal InputBox_Left As Integer=200, _
ByVal InputBox_Top As Integer=100) As String
Dim Response As ZString Ptr
Dim ResponseText As String
Dim InputDialogMessage As InputDialogMessage
With InputDialogMessage
.Title=Title
.Text=Text
.InputBox_Left=InputBox_Left
.InputBox_Top=InputBox_Top
End With
Response=cast(ZString ptr, DialogBoxParam(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_INPUTBOX), _
NULL, @InputBoxProc, cast(LPARAM, @InputDialogMessage)))
If Response<>0 Then
ResponseText = *Response
Deallocate Response
Return ResponseText
End If
End Function |
Mit einem Hauptprogramm sieht das dann so aus: Code: | Option Escape
Option Explicit
#include once "windows.bi"
#include "inputbox.bas"
Dim Message As String
Message="1:Diese InputBox hat Raum für 'n Menü-Text\n" &_
"2:von 5 Zeilen, daß sollte für eine einfache\n" &_
"3:Beschreibung der Eingabe genug sein, aaber:\n" &_
"4:-es gibt keinen Vorgabe-Text\n" &_
"5:-sie ist NICHT dynamisch(wie schade).."
Message=InputBox(Message, "InputBox-Window")
If Message<>"" Then MessageBox(Null, "Nun, dies ist die Eingabe:\n" &Message, "Kuck ma an!", MB_ICONINFORMATION) |
Da das Ganze nicht auf Anhieb lief, habe ich mir eine Batch-Datei gemacht: Code: | @Echo Off
::Theoretisch funktioniert diese Batch-Datei ab MsDos 6.2++
fbc -s gui hauptprogramm.bas inputbox.rc
Set Msg=''
If ErrorLevel 1 Set Msg=Ooops, da war ein Fehler..
If Not Msg='' Then Pause
:Ende |
Entscheidend ist hier die fbc-Zeile, denn damit wird die .rc-Datei in die .Exe eingebunden..
Happy InputBoxing unter Windows
ytwinky
PS:getestet mit FB0.15b(01.12.2005) in D:\Sprachen\freeBASIC
diesmal ohne FBIDE, die gerade mit JellyFish Pro-Editor darum
kämpft, bei mir Standard(mit 'd' am Ende ) zu werden.. _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|