| 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.. _________________
 
 ..also ungefähr so, wie ich GOTO.. 	  | v1ctor hat Folgendes geschrieben: |  	  | Yeah, i like INPUT$(n) as much as PRINT USING.. | 
 |  |