Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

InputBox in FB unter Windows

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 05.01.2006, 19:05    Titel: InputBox in FB unter Windows Antworten mit Zitat

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 vor lachen auf dem Boden rollen)
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 zwinkern). Dies wird kein Tutorium über das Erstellen von .rc-Dateien
(kann auch nicht, denn dazu müßte ich dies Thema BEHERRSCHEN zwinkern), 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 lachen) zu werden..
_________________
v1ctor hat Folgendes geschrieben:
Yeah, i like INPUT$(n) as much as PRINT USING..
..also ungefähr so, wie ich GOTO..
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Windows-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz