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:

Buttons/Checkbox? MB_...?

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 01.02.2010, 21:30    Titel: Buttons/Checkbox? MB_...? Antworten mit Zitat

Hallo.

Ich würde gerne in Freebasic so eine Art Button/Checkbox programmieren, wo man mit der Maus drauf drücken kann. (Häckchen sätzen) Es gibt in FB noch die Befehle mit MB_DEFBUTTON1 und MB_OK bzw. MB_APPLMODAL und MB_ABORTRETRYIGNORE. Weiß jemand wie man sowas macht? Brauche es für einen Screensaver.

Und wie macht man einen beweglichen Balken?
Womit man 100% oder 33% oder 75% einstellen kann?

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.02.2010, 23:36    Titel: Antworten mit Zitat

http://www.freebasic-portal.de/tutorials/lutz-ifers-winapi-tutorial-64.html
Viel Spaß beim Durcharbeiten. zwinkern
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 02.02.2010, 02:46    Titel: Antworten mit Zitat

Die von dir genannten Dinge sind keine Befehle.
http://www.freebasic-portal.de/code-beispiele/grafik-und-fonts/progressbar-135.html

(Alles andere dürfte dir zu kompliziert sein. Oder zu strapaziös für den Forumsserver)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 02.02.2010, 20:59    Titel: Antworten mit Zitat

Hallo.

Habe mir mal das ganze durchgeschaut, blicke aber bei den Buttons nicht ganz durch.

http://www.freebasic-portal.de/tutorials/lutz-ifers-winapi-tutorial-64-s16.html

Das ganze ist als Funktion. Wie mache ich das damit das bei der Saver.bas funktioniert? Bei mir wird entweder keine Buttons angezeigt oder es kommt eine Fehlermeldung.

Code:
#include "windows.bi"
const ProgrammName = "TEST"
DECLARE SUB ConfigureScreensaver
DECLARE SUB ShowScreensaver
Declare Sub spielfeld
declare function WndProc(byval hWnd as HWND, byval message as UINTEGER,_
    byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
Declare function SubProc(byval hWnd as HWND, byval message as UINTEGER,_
    byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT

DIM SHARED AS INTEGER mx_alt, my_alt, mx_neu, my_neu
DIM AS STRING Param

' Kein Parameter?
IF COMMAND(1) = "" THEN
  If MessageBox(0, "Sreensaver testen?", " ", MB_ICONQUESTION OR MB_YESNO) = IDYES THEN
    ShowScreensaver
  END IF
  END
END IF

' Gewünschtes Kommando isolieren
Param = MID(COMMAND(1), 2, 1)

SELECT CASE Param
CASE "s","S"
  ShowScreensaver
CASE "c","C"
  ConfigureScreensaver
   Case "p", "P"
      
END SELECT

End
SUB ConfigureScreensaver
 
    dim as WNDCLASS   wndcls
with wndcls
    .style         =  CS_HREDRAW or CS_VREDRAW
    .lpfnWndProc   =  ProcPtr(WndProc)
    .cbClsExtra    =  0
    .cbWndExtra    =  0
    .hInstance     =  GetModuleHandle(NULL)
    .hCursor       =  LoadCursor(NULL, IDC_ARROW)
    .hIcon         =  LoadIcon(NULL, IDI_APPLICATION)
    .hbrBackground =  GetSysColorBrush(COLOR_WINDOW)
    .lpszClassName =  StrPtr(ProgrammName)
    .lpszMenuName  =  NULL
end with
RegisterClass @wndcls

dim as HWND   hWnd = CreateWindow(_
    ProgrammName, ProgrammName, WS_OVERLAPPED or WS_SYSMENU,_
    CW_USEDEFAULT, CW_USEDEFAULT, 180, 210,_
    NULL, NULL, GetModuleHandle(NULL), NULL)

MessageBox(0, "Einstellungen", " ", MB_ICONINFORMATION)

' ****************************************
'                       ??? Fehler???
'
' CreateWindow hwnd, SW_NORMAL
UpdateWindow hWnd
' ****************************************

Dim as MSG msg
Do while getmessage(@msg, NULL, 0, 0) <> 0
DispatchMessage  @msg
Loop
End msg.wParam
End SUB
SUB ShowScreensaver
  ' Vollbild, kein weiterer Moduswechsel
  Screen 8,32,, 1 Or 4
 
  ' Maussymbol nicht anzeigen
  SETMOUSE ,,0
  SLEEP 50
  ' Mausposition merken
  GETMOUSE mx_alt, my_alt

  ' Zufallsgenerator initialisieren
  RANDOMIZE TIMER

' Grafik initialisieren

 DO
 ' SCREENLOCK 'verhindert unschönes Bildschirmflimmern
spielfeld
 ' SCREENUNLOCK 'verhindert unschönes Bildschirmflimmern

    GETMOUSE mx_neu, my_neu
    'wurde die Maus bewegt?
    IF mx_neu<>mx_alt OR my_neu<>my_alt OR INKEY <> "" Then
      EXIT SUB
    END IF
    ' Zur Senkung der Prozessorlast immer ein bisschen warten
    ' SLEEP 1
 Loop
END Sub

Sub spielfeld
End Sub

function WndProc(byval hWnd as HWND, byval message as UINTEGER,_
    byval wParam as WPARAM, byval lParam as LPARAM) as LRESULT
   
    static  as HWND hrot, hblau, hgruen
   
    select case message
       case WM_DESTROY
            PostQuitMessage 0
            return 0
           
        case WM_CREATE
            CreateWindow("button", "Geschwindigkeit?",_
                WS_CHILD or WS_VISIBLE or WS_GROUP or BS_GROUPBOX,_
                5,90,160, 90, hWnd, NULL,_
                cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
            hrot = CreateWindow("button", "100",_
                BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD or WS_GROUP,_
                10, 110, 70,20, hWnd, NULL,_
                cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
            hblau = CreateWindow("button", "10",_
                BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD,_
                10, 130, 70,20, hWnd, NULL,_
                cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
            hgruen = CreateWindow("button", "1",_
                BS_AUTORADIOBUTTON or WS_VISIBLE or WS_CHILD,_
                10, 150, 70,20, hWnd, NULL,_
                cast(LPCREATESTRUCT,lParam)->hInstance,NULL)
            SendMessage hrot, BM_SETCHECK, BST_CHECKED, 0
            return 0
    end select
    return DefWindowProc( hWnd, message, wParam, lParam )   
end Function


Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.02.2010, 22:45    Titel: Antworten mit Zitat

Ein Button ist ein Unterfenster des eigentlichen Fensters.
Der FB-Screen, den du erstellst, hat die Eigenschaft, dass du keine Windowsbuttons draufkleben kannst. Du musst also das komplette Fenster selbst erstellen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 02.02.2010, 22:54    Titel: Antworten mit Zitat

Copy and Paste at it highest (oder so ähnlich)

Mach dich doch mal am besten ersteinmal mit den Konzepten von Fenstern, Fensterprozeduren, Fensterklassen, Fensterstile und Fenstereigenschaften vertraut.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 07.02.2010, 20:47    Titel: Antworten mit Zitat

Es gibt ja die Möglichkeit mit der Texteingabe. Benutzer gibt zum Beispiel einen x-beliebigen Text ein. Begrenzt auf z. Bsp. auf 10 Zeichen. Ich glaube ich habe vor kurzem schon mal was im Internet gefunden. Weiß aber nicht mehr wo. Suche hat mir nicht viel geholfen.
Müsste mit WinAPI gehen. Werde aber noch mal überall suchen.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Stueber



Anmeldungsdatum: 07.07.2008
Beiträge: 202

BeitragVerfasst am: 07.02.2010, 21:11    Titel: Antworten mit Zitat

Sowas heist Edit und wird wenn ich mich nicht täusche so erzeugt:
Code:
CreateWindow("EDIT","",WS_CHILD or VS_VISIBLE or ES_LEFT,0,0,100,25,hwnd,0,hInstance,0)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 07.02.2010, 21:24    Titel: Antworten mit Zitat

Stueber hat Folgendes geschrieben:
Sowas heist Edit und wird wenn ich mich nicht täusche so erzeugt:
Code:
CreateWindow("EDIT","",WS_CHILD or VS_VISIBLE or ES_LEFT,0,0,100,25,hwnd,0,hInstance,0)


Bei mir funktioniert der Code nicht. Oder besser gesagt nicht so wie ich will. Hmm?
Code:
CreateWindow("COMBOBOX","",WS_CHILD or VS_VISIBLE or ES_LEFT,0,0,100,25,hwnd,NULL,hInstance,NULL)


Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 07.02.2010, 21:31    Titel: Antworten mit Zitat

Also nochmal, WinAPI Fensterelemente lassen sich nicht auf FreeBASIC-Screens anwenden. Die Funktion funktioniert deswegen nicht, weil es ein Kind-Fenster (Childwindow) für das Hauptfenster erzeugt. Zu erkennen am "WS_CHILD".

Erstell erstmal ein Parentwindow und darauf kannst du dann die Funktion anwenden.

Also: WinAPI-Tutorial durcharbeiten und versuchen zu verstehen und nicht nur Copy&Paste.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 07.02.2010, 21:43    Titel: Antworten mit Zitat

@MOD:

Mir geht es nur um ein Eingabefeld für Texte/Buchstaben. Begrenzt auf x-Zeichen. Combobox erzeugt schon mal das was ich haben will. Nur kann ich keine Buchstaben eingeben.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 07.02.2010, 21:46    Titel: Antworten mit Zitat

Wenn es nur sowas ist, dann schreib dir doch deine eigene Inkey-Routine, die ab einer bestimmten Länge dicht macht. Das ist nicht sonderlich schwer.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 08.02.2010, 17:18    Titel: Antworten mit Zitat

Code:
#Include "windows.bi"

Dim As MSG msg
Dim As HWND hWnd, btn1, edt1

' Create window
hWnd = CreateWindowEx( 0, "#32770", "Hello", WS_OVERLAPPEDWINDOW Or WS_VISIBLE, 100, 100, 500, 300, 0, 0, 0, 0 )
' Create button
btn1 = CreateWindowEx( 0, "BUTTON", "Button #1", WS_VISIBLE Or WS_CHILD, 20, 10, 100, 30, hWnd, 0, 0, 0 )
' Create edit box
edt1 = CreateWindowEx( 0, "EDIT", "Type text here...", ws_border Or WS_VISIBLE Or WS_CHILD Or WS_HSCROLL Or WS_VSCROLL Or ES_AUTOHSCROLL Or ES_AUTOVSCROLL Or ES_MULTILINE, 20, 50, 200, 100, hWnd, 0, 0, 0 )

While GetMessage( @msg, 0, 0, 0 )
  TranslateMessage( @msg )
  DispatchMessage( @msg )
 
  Select Case msg.hwnd
    Case hWnd
      Select Case msg.message
        Case 273
          End
         
        ' If left mouse button was pressed in window area then
        ' check if is edit box text = "". If it is then set
        ' the edit box text to "Type text here" and set focus
        ' to the window
        Case WM_LBUTTONDOWN
          Dim As Zstring*1024 txt
         
          GetWindowText( edt1, txt, SizeOf( txt ) )
          If txt = "" Then SetWindowText( edt1, "Type text here..." )
         
          SetFocus( hWnd )  ' Set focus to the window
         
        Case Else
          ' Create rect variable and store window size in it
          Dim As RECT rct: GetClientRect( hWnd, @rct )
         
          ' Resize the edit box
          MoveWindow( edt1, 20, 50, rct.right-40, rct.bottom-60, TRUE )
      End Select
     
    Case btn1
      Select Case msg.message
        ' If left mouse button was pressed in button area then
        ' check if is edit box text = "". If it is then set
        ' the edit box text to "Type text here"
        Case WM_LBUTTONDOWN
          ' When button is pressed set the text
          ' of button to "pressed"
          SetWindowText( btn1, "Clicked!" )
         
          Dim As Zstring*1024 txt
         
          GetWindowText( edt1, txt, SizeOf( txt ) )
          If txt = "" Then SetWindowText( edt1, "Type text here..." )
         
        ' If left mouse button was released from the button area
        ' then set the button text to "Button #1" and show
        ' massage box with text from text box
        Case WM_LBUTTONUP
          SetWindowText( btn1, "Button #1" )
         
          Dim As Zstring*1024 txt
         
          GetWindowText( edt1, txt, SizeOf( txt ) )
          MessageBox( hWnd, txt, "Hello", MB_OK )
      End Select
    Case edt1
      Select Case msg.message
        ' When textbox was pressed then clar the textbox text if
        ' text = "Type text here..."
        Case WM_LBUTTONDOWN
          Dim As Zstring*1024 txt
          GetWindowText( edt1, txt, SizeOf( txt ) )
          If txt = "Type text here..." Then SetWindowText( edt1, "" )
      End Select
  End Select
Wend


Habe im Internet einen Quellcode gefunden, wo so eine Editbox drin. Das ist genau das, was ich für mein Programm brauche. Man muss nur lange genug suchen!

Quellcode funktioniert, habe ihn getestet.

Mit freundlichen Grüßen
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 08.02.2010, 17:21    Titel: Antworten mit Zitat

Ich möcht ja nix sagen, aber da wird genau das gemacht, was ich dir die ganze Zeit prädige, da wird nämlich erst ein eigenes WinAPI-Fenster erstellt und dann erst der Button draufgelegt...ich gebs auf...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 08.02.2010, 22:17    Titel: Antworten mit Zitat

Wer ALWIM schon seit längerer Zeit beobachtet, weiß, dass er ganz gerne einfach nicht zuhört.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. 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