Tutorial
Widgetologie * GUI-Programierung mit FLTK
von Knatterton | Seite 1 von 1 |
Inhalt
8. Widgetologie
8.1 Box
8.2 Counter
8.3 Input
8.4 Choice
8. Widgetologie
ist ein weiteres Gebiet in dem Elemente von FLTK-C untersucht werden.
8.1 Box
Eine Box bietet eine Möglichkeit Text oder Grafik auf den Bildschirm zu bringen. Die Ausrichtung kann dabei für innerhalb und ausserhalb der Box gesondert angegeben werden. Einige Möglichkeiten:
' Fltk_Box_Text.bas
#include once "fltk-c.bi"
var Win = Fl_WindowNew(555, 555, "Fltk_Box_Text")
Dim As String text1 = "Text 1", text2 = "Text 2", text3 = "Text 3"
Var box1 = Fl_BoxNew(10,10,120, 50, text1)
Fl_WidgetSetAlign box1, Fl_ALIGN_TOP_LEFT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box1, FL_ENGRAVED_BOX )
Fl_WidgetSetColor box1, FL_BLUE
Fl_WidgetSetLabelFont(box1, FL_COURIER)
Fl_WidgetSetLabelSize(box1,24)
Var box2 = Fl_BoxNew(10,210,120, 50, text2)
Fl_WidgetSetAlign box2, Fl_ALIGN_LEFT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box2, FL_EMBOSSED_BOX)
Fl_WidgetSetColor box2, FL_RED
Fl_WidgetSetLabelFont(box2, FL_TIMES)
Fl_WidgetSetLabelSize(box2,24)
Var box3 = Fl_BoxNew(10,410,120, 50, text3)
Fl_WidgetSetAlign box3, Fl_ALIGN_BOTTOM_LEFT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box3, FL_ENGRAVED_BOX)
Fl_WidgetSetColor(box3, FL_WHITE)
Fl_WidgetSetLabelFont(box3, FL_HELVETICA)
Fl_WidgetSetLabelSize(box3,24)
Var box4 = Fl_BoxNew(200, 10,120, 50, text1)
Fl_WidgetSetAlign box4, Fl_ALIGN_TOP or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box4, FL_ENGRAVED_BOX)
Fl_WidgetSetColor box4, FL_DARK_CYAN
Fl_WidgetSetLabelFont(box4, FL_TIMES)
Fl_WidgetSetLabelSize(box4,14)
Var box5 = Fl_BoxNew(200,210,120, 50, text2)
Fl_WidgetSetAlign box5, Fl_ALIGN_CENTER or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box5, FL_BORDER_BOX)
Fl_WidgetSetColor box5, FL_MAGENTA
Fl_WidgetSetLabelFont(box5, FL_TIMES)
Fl_WidgetSetLabelSize(box5,24)
Var box6 = Fl_BoxNew(200,410,120, 50, text3)
Fl_WidgetSetAlign box6, Fl_ALIGN_BOTTOM or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box6, FL_EMBOSSED_BOX)
Fl_WidgetSetColor box6, FL_YELLOW
Fl_WidgetSetLabelFont(box6, FL_HELVETICA)
Fl_WidgetSetLabelSize(box6,14)
Var box7 = Fl_BoxNew(400, 10,120, 50, text1)
Fl_WidgetSetAlign box7, Fl_ALIGN_TOP_RIGHT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box7, FL_ENGRAVED_BOX)
Fl_WidgetSetColor box7, FL_GREEN
Fl_WidgetSetLabelFont(box7, FL_COURIER)
Fl_WidgetSetLabelSize(box7,14)
Var box8 = Fl_BoxNew(400,210,120, 50, text2)
Fl_WidgetSetAlign box8, Fl_ALIGN_RIGHT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box8, FL_BORDER_BOX)
Fl_WidgetSetColor box8, FL_DARK_CYAN
Fl_WidgetSetLabelFont(box8, FL_TIMES)
Fl_WidgetSetLabelSize(box8,24)
Var box9 = Fl_BoxNew(400,410,120, 50, text3)
Fl_WidgetSetAlign box9, Fl_ALIGN_BOTTOM_RIGHT or Fl_ALIGN_INSIDE
Fl_WidgetSetBox(box9, FL_SHADOW_BOX )
Fl_WidgetSetColor box9, FL_DARK_YELLOW
Fl_WidgetSetLabelFont(box9, FL_HELVETICA)
Fl_WidgetSetLabelSize(box9,12)
' where FL_ALIGN can be one oft these
' Fl_ALIGN_CENTER ' default
' Fl_ALIGN_TOP
' Fl_ALIGN_BOTTOM
' Fl_ALIGN_LEFT
' Fl_ALIGN_TOP_LEFT
' Fl_ALIGN_BOTTOM_LEFT
' Fl_ALIGN_LEFT_TOP
' Fl_ALIGN_RIGHT
' Fl_ALIGN_TOP_RIGHT
' Fl_ALIGN_BOTTOM_RIGHT
' Fl_ALIGN_RIGHT_TOP
' Fl_ALIGN_LEFT_BOTTOM
' Fl_ALIGN_RIGHT_BOTTOM
' Fl_ALIGN_POSITION_MASK
' can combined with "or" with these:
' Fl_ALIGN_INSIDE
' Fl_ALIGN_TEXT_OVER_IMAGE
' Fl_ALIGN_CLIP
' Fl_ALIGN_WRAP
' Fl_ALIGN_IMAGE_OVER_TEXT
' Fl_ALIGN_IMAGE_NEXT_TO_TEXT
' Fl_ALIGN_TEXT_NEXT_TO_IMAGE
' Fl_ALIGN_IMAGE_BACKDROP
' Fl_ALIGN_IMAGE_MASK
Fl_WindowShow Win
Fl_Run
8.2 Counter
Den Counter kann man auch für Integer oder Float nutzen.
' Fltk_Counter_01.bas
#include once "fltk-c.bi"
sub CounterCB cdecl (byval self as FL_WIDGET ptr,byval valuator as any ptr)
print *Fl_WidgetGetLabel(self) & " value = " & Fl_ValuatorGetValue(valuator)
end sub
var win = Fl_WindowNew(333,333,"Fltk_Counter_01.bas")
var cnt1 = Fl_Simple_CounterNew(60,50,192,24,"int counter 1")
var cnt2 = Fl_Simple_CounterNew(60,100,192,24,"float counter 2")
var cnt3 = Fl_CounterNew(60,150,192,24,"int counter 3")
var cnt4 = Fl_CounterNew(60,200,192,24,"float counter 4")
Fl_WidgetSetLabelType(cnt1,FL_LABEL_ENGRAVED )
' connect callbacks
Fl_WidgetSetCallbackArg cnt1,@CounterCB,cnt1
Fl_WidgetSetCallbackArg cnt2,@CounterCB,cnt2
Fl_WidgetSetCallbackArg cnt3,@CounterCB,cnt3
Fl_WidgetSetCallbackArg cnt4,@CounterCB,cnt4
' set to integer
Fl_ValuatorSetStep(cnt1, 1)
Fl_ValuatorSetStep(cnt3, 1)
' set bounds
Fl_ValuatorBounds(cnt1 , 0, 6)
Fl_ValuatorBounds(cnt2 , -7, 7)
Fl_ValuatorBounds(cnt3 , 0, 8)
Fl_ValuatorBounds(cnt4 , -1.7, 3.14)
' set initial values
Fl_ValuatorSetValue(cnt1 , 1)
Fl_ValuatorSetValue(cnt2 , -2.1)
Fl_ValuatorSetValue(cnt3 , 1)
Fl_ValuatorSetValue(cnt4 , 1.1)
Fl_GroupSetResizable win,win
Fl_WindowShow win
Fl_Run
8.3 Input
Bei Input kann man Text oder Zahlen eingeben und es kann auch ein Wert vorgegeben werden.
' Fltk_Input_01.bas
' added initial values
#include once "fltk-c.bi"
'test of:
' Fl_InputNew
' Fl_Int_InputNew
' Fl_Float_InputNew
' Fl_Multiline_InputNew
' Fl_WidgetSetCallbackArg
' Fl_WidgetSetWhen
' nearly the same as Fl_Input03.bas
' but the userdata callback argument points to an Fl_Input_ ptr now.
sub InputCB cdecl (byval self as Fl_Widget ptr,byval input_ as any ptr)
print "InputCB: " & *Fl_Input_GetValue(input_)
end sub
var win = Fl_WindowNew(320,200,"Fltk_Input_01.bas")
var inp1 = Fl_InputNew (120, 5,190, 20,"Fl_Input:")
var inp2 = Fl_Int_InputNew (120,30,190, 20,"Fl_Int_Input:")
var inp3 = Fl_Float_InputNew (120,55,190, 20,"Fl_Float_Input:")
var inp4 = Fl_Multiline_InputNew(120,80,190,100,"Fl_Multiline_Input:")
Fl_WidgetSetWhen inp4,FL_WHEN_CHANGED
' set callbacks
Fl_WidgetSetCallbackArg inp1,@InputCB,inp1
Fl_WidgetSetCallbackArg inp2,@InputCB,inp2
Fl_WidgetSetCallbackArg inp3,@InputCB,inp3
Fl_WidgetSetCallbackArg inp4,@InputCB,inp4
' set initial values (for all strings)
Fl_Input_SetValue(inp1, "Test 1")
Fl_Input_SetValue(inp2, "1234")
Fl_Input_SetValue(inp3, "0.1234")
Fl_Input_SetValue(inp4, "Test 4")
Fl_WindowShow win
Fl_Run
8.4 Choice
Mit Choice kann man aus einer Dropdownbox auswählen.
' Fltk_Choice_01.bas
#include once "fltk-c.bi"
' test of:
' Fl_Choice http://www.fltk.org/doc-1.3/classFl__Choice.html
sub ChoiceCB cdecl (byval self as Fl_Widget ptr,byval cho as any ptr)
' get parent of the widget
var win = Fl_WidgetWindow(self)
' get index of selected item
var ind = Fl_ChoiceGetValue(cho)
' copy label from item to window caption
Fl_WindowCopyLabel win,Fl_Menu_GetMenu(cho)[ind].text
end sub
var win = Fl_WindowNew(256,240,"Fltk_Choice_01.bas")
var cho = Fl_ChoiceNew(64,30,128,24,"Label:")
' add item
Fl_Menu_Add3(cho,"item1")
Fl_Menu_Add3(cho,"item2|item4")
' insert item
Fl_Menu_Insert(cho,2,"item3")
' select item
Fl_ChoiceSetValue(cho,2)
'Fl_ChoiceSetValueByItem(cho, @"test") 'value))
' set label(choice is treated as widget here)
Fl_WidgetSetLabel(cho, "Test:")
' add standard callback
Fl_WidgetSetCallbackArg cho,@ChoiceCB,cho
Fl_WindowShow win
Fl_Run
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|
|