Negative Checkbox

Für allgemeine Fragen zur Programmierung mit PureBasic.
hanshampel
Beiträge: 36
Registriert: 11.09.2004 18:18
Wohnort: Hohenkirchen
Kontaktdaten:

Negative Checkbox

Beitrag von hanshampel »

Hallo
Ich benötige eine "negative" Checkbox. Aus einer Liste (Listicongadget) sollen Daten
nicht gedruckt werden wenn die Checkbox gesetzt ist. Dafür wäre eine
Checkbox mit einem roten x drin sinnvoller als ein Haken.
Hat jemand eine Idee wie ich das angehen kann?


Hans
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Negative Checkbox

Beitrag von Kiffi »

hanshampel hat geschrieben:Dafür wäre eine Checkbox mit einem roten x drin sinnvoller als ein Haken.
Halte ich persönlich für nicht intuitiv erfassbar. Wäre es nicht sinnvoller,
alle Checkboxen anzuhaken und bei den nicht zu druckenden Einträgen
den Haken zu entfernen?

Grüße ... Kiffi
a²+b²=mc²
sibru
Beiträge: 265
Registriert: 15.09.2004 18:11
Wohnort: hamburg

Re: Negative Checkbox

Beitrag von sibru »

wie währ´s damit:

Code: Alles auswählen

;+----------------------------------------------------------------------+
;|      PureBasic-QuellCode "CheckBox_ColorI" mit allen ModulBody´s     |
;|erstellt durch Programm "PB_Mod2Body", Vers. 11225a am 06.02.12, 11:37|
;+----------------------------------------------------------------------+


;Modul      CheckBox_Color Version 1.00 vom 22.01.2009
#PB_Vers  = "4.20"
;
;Funktion:  versieht ListIcon mit farbigen Checkboxen (generell, für alle Zeilen)
;           Ein bestehendes ListIcon mit Option #PB_ListIcon_CheckBoxes kann
;           mit dieser Funktion mit farbigen Checkboxen versehen werden: jeweils
;           Rahmen- und Füll-Farbe für markiert und de-markiert sind änderbar,
;           ebenso die Farbe des Markierungs-Kreutzes.
;           Neben hübschem Layout können durch Farben-Gleichheit auch Checkboxes
;           ausgeblendet werden, ohne Kreutz markiert werden (z.Bsp. Rahmen und
;           Fill = rot (mark) oder grün (de-mark) und weitere Sonderfunktionen
;           realisiert werden...
;
;Aufruf:    LI_CheckBox_Color(GadNr {,RGB_Mark {,RGB_Fill1 {,RGB_Rahmen1 {,RGB_Fill0 {,RGB_Rahmen0}}}}})
;           GadNr      = #GadgetNr des ListIcon´s
;           RGB_Mark   = RGB-Farbwert des kreutzes, wenn Zeile markiert. Wenn nicht
;                        angegeben, so wird blau benutzt
;           RGB_Fill1  = RGB-Farbwert des Box-Hintergrundes, wenn Zeile markiert.
;                        Wenn nicht angegeben, so wird weiss benutzt
;           RGB_Rahmen1= RGB-Farbwert des Box-Rahmens, wenn Zeile markiert. Wenn
;                        nicht angegeben, so wird schwarz benutzt
;           RGB_Fill0  = RGB-Farbwert des Box-Hintergrundes, wenn Zeile de-markiert.
;                        Wenn nicht angegeben, so wird weiss benutzt
;           RGB_Rahmen0= RGB-Farbwert des Box-Rahmens, wenn Zeile de-markiert. Wenn
;                        nicht angegeben, so wird schwarz benutzt
;           Werden keine Farb-Parameter angegeben, so erfolgt die Darstellung der
;           Checkboxes standartgemäß (schwarzer Rahmen, weisser Hintergrund, schwarzes
;           Kreutz...
;
;           Diese Funktion muss nach dem Aufbau des ListIcon´s mit Option "#PB_ListIcon_CheckBoxes"
;           und auch nach einer Font-Zuweisung aufgerufen werden (Größe der Check=
;           boxen abhängig von Font-Size).
;           Mehrfach-Aufruf auf einem ListIcon möglich, ebenso Aufrufe für diverse
;           ListIcon´s...
;

;#jaPBeExt exit
 ;==========  Begin Modul "TextHoch.PBI"  ==========
;Modul      TextHoch Version 1.1 vom 01.10.2008
#PB_Vers  = "4.20"
;
;Funktion:  liefert Höhe eines Font´s [Dot´s]
;
;Aufruf:    TextHoch.l = TextHoch(FontID)
Procedure TextHoch(TH_FontID)        ;- Texthöhe [Dot´s] bestimmen
  Protected DC, TM.TEXTMETRIC
  DC = GetDC_(GetDesktopWindow_())
  If DC
    SelectObject_(DC,TH_FontID)
    GetTextMetrics_(DC,TM)
  EndIf
  ProcedureReturn TM\tmHeight
EndProcedure
 ;==========  Ende Modul "TextHoch.PBI"  ==========

Procedure LI_CheckBox_Color(TabNr, RGB_Mark = #Blue, RGB_Fill1 = #White , RGB_Rahmen1 = #Black, RGB_Fill0 = #White, RGB_Rahmen0 = #Black)
  Protected BoxSize = TextHoch(GetGadgetFont(TabNr))
  Protected BildNr = CreateImage(#PB_Any, BoxSize, BoxSize)
  Protected itemChecked = ImageID(BildNr)
  Protected Rahmen = BoxSize / 8 : If Rahmen<1 : Rahmen=1 : EndIf
  StartDrawing(ImageOutput(BildNr))
  Box(0, 0, BoxSize, BoxSize, RGB_Rahmen1)
  Box(Rahmen, Rahmen, BoxSize - Rahmen - Rahmen, BoxSize - Rahmen - Rahmen, RGB_Fill1)
  LineXY(4, 4, BoxSize - 5, BoxSize - 5, RGB_Mark)
  LineXY(5, 4, BoxSize - 5, BoxSize - 6, RGB_Mark)
  LineXY(4, 5, BoxSize - 6, BoxSize - 5, RGB_Mark)
  LineXY(4, BoxSize - 5, BoxSize - 5, 4, RGB_Mark)
  LineXY(4, BoxSize - 6, BoxSize - 6, 4, RGB_Mark)
  LineXY(5, BoxSize - 5, BoxSize - 5, 5, RGB_Mark)
  StopDrawing()
  BildNr = CreateImage(#PB_Any, BoxSize, BoxSize)
  Protected itemUnchecked = ImageID(BildNr)
  StartDrawing(ImageOutput(BildNr))
  Box(0, 0, BoxSize, BoxSize, RGB_Rahmen0)
  Box(Rahmen, Rahmen, BoxSize - Rahmen - Rahmen, BoxSize - Rahmen - Rahmen, RGB_Fill0)
  StopDrawing()
  Protected stateImageList = ImageList_Create_(BoxSize, BoxSize, #ILC_MASK|#ILC_COLOR32, 0, 2)
  ImageList_Add_(stateImageList, itemUnchecked, 0)
  ImageList_Add_(stateImageList, itemChecked, 0)
  SendMessage_(GadgetID(TabNr), #LVM_SETIMAGELIST, #LVSIL_STATE,  stateImageList)
EndProcedure
Das mit der Funktions-Umkehr (markiert _nicht_ drucken) könnte so aussehen:

Code: Alles auswählen

   For Zeile = 0 To CountGadgetItems(#ListIcon) - 1
    If GetGadgetItemState(#ListIcon, Zeile) & #PB_ListIcon_Checked
      ;Zeile_drucken(Zeile) ;wenn markiert
    Else
      Zeile_drucken(Zeile) ;wenn _nicht_ markiert
    EndIf
  Next
Viel Erfolg...
Bild Bild
hanshampel
Beiträge: 36
Registriert: 11.09.2004 18:18
Wohnort: Hohenkirchen
Kontaktdaten:

Re: Negative Checkbox

Beitrag von hanshampel »

@Kiffi
Ja , so hab ich es im Moment gelöst ,aber bei 50 Häkchen die drei
zu finden die nicht gesetzt sind finde ich nicht so intuitiv.
Es ist auch so daß normal immer alles gedruckt wird.
Nur von Zeit zu Zeit eben mal ein oder zwei Einträge nicht.
Das hab ich vielleicht nicht genau genug dargestellt....

@ sibru
Vielen Dank für die Listings.Ich schau mir das mal an.
edit:
Das sieht aus wie Windows-only.

Ich hab jetzt schonmal einen Buttonimagegadget mit toggle gestrickt.

Code: Alles auswählen

LoadImage(11,"Datei/irgendow/kreuz.bmp")

If OpenWindow(0,100,100,400,400,"test", #PB_Window_SystemMenu)
  ButtonImageGadget(3,100,360,30,30,0,#PB_Button_Toggle)
EndIf
Repeat
  event= WaitWindowEvent()
  If event  
    If GetGadgetState(3)=1
      SetGadgetAttribute(3,#PB_Button_PressedImage,ImageID(11))
    Else  
      SetGadgetAttribute(3,#PB_Button_Image,0)  
    EndIf  
EndIf

Until event=#PB_Event_CloseWindow
Nun werd ich mal sehen ob ich das noch im Listicongadet untergebracht bekomme.
edit2:
wahrscheinlich eher nicht...
Mal sehn was die GTK-Hilfe so her gibt.

hans
Antworten