hi,
der 6th. Parameter "alCanSelect" von AChoice() enthält ein Array mit .T./.F. ob ein Element "wählbar" ist.
hatten wir schon eine Lösung für XbpListBox() gefunden ... ich finde nichts ?
AChoice() -> ListBox() [erledigt]
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: AChoice() -> ListBox()
hm ... im Demo C:\ALASKA\XPPW32\Source\samples\basics\OWNERDRW\COLORBOX.prg
steht in Zeile 180aber er kommt nie in Zeile 181 weil ja kein Item "disabled" ist ... wie macht man den das ?
wenn ich nun eine "native" Listbox erstelle kann ich LBS_NOSEL als Style verwenden,
aber damit werden alle Items "disable(t)" was das selbe wäre wie
IMHO gibt es wohl keine "vorhandene" Möglichkeit nur einzelne Items einer Listbox zu "disable"
man müsste schon tricksen z.b. ein "internes" Array ... aber wohl auch eine komplette "Steuerung".
mit Ownerdraw "male" ich ja nur was aber wenn ich auf ein "disable" Item clicke darf ja "nichts" passieren.
und dann gibt es auch noch das Keyboard und ENTER was man ebenso "abfangen" müsste...
und das alles weil der Kunden den "alten" AChoise() Style haben möchte ... dabei könnte ich doch vor o:addItem() einfach die "disable" aussortieren.
steht in Zeile 180
Code: Alles auswählen
IF BAND(mp2[3],XBP_DRAWSTATE_DISABLED) != 0
aStringAttrs[GRA_AS_COLOR] := XBPSYSCLR_INACTIVETITLETEXT
ELSEIF BAND(mp2[3],XBP_DRAWSTATE_SELECTED) != 0
wenn ich nun eine "native" Listbox erstelle kann ich LBS_NOSEL als Style verwenden,
aber damit werden alle Items "disable(t)" was das selbe wäre wie
Code: Alles auswählen
oListbox:Disable()
man müsste schon tricksen z.b. ein "internes" Array ... aber wohl auch eine komplette "Steuerung".
mit Ownerdraw "male" ich ja nur was aber wenn ich auf ein "disable" Item clicke darf ja "nichts" passieren.
und dann gibt es auch noch das Keyboard und ENTER was man ebenso "abfangen" müsste...
und das alles weil der Kunden den "alten" AChoise() Style haben möchte ... dabei könnte ich doch vor o:addItem() einfach die "disable" aussortieren.
gruss by OHR
Jimmy
Jimmy
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9356
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 101 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: AChoice() -> ListBox()
Hallo, Jimmy.
Mit Ownerdrawing könntest Du Markierungen innerhalb der Listbox-Elemente abfangen (etwa ein Textstück anhängen, dessen Eingabe unwahrscheinlich ist - z.B. "[*]") und darauf reagieren, indem Du beispielsweise ein helles Grau für die Darstellung der vermeintlich inaktiven Elemente wählst, aus denen Du vor der Darstellung den Markierungstext entfernst. Ebenso könntest Du dann in den ItemSelected-Codeblöcken reflektieren, ob diese Markierung - die man nicht sieht - enthalten ist. Feddisch.
Mit Ownerdrawing könntest Du Markierungen innerhalb der Listbox-Elemente abfangen (etwa ein Textstück anhängen, dessen Eingabe unwahrscheinlich ist - z.B. "[*]") und darauf reagieren, indem Du beispielsweise ein helles Grau für die Darstellung der vermeintlich inaktiven Elemente wählst, aus denen Du vor der Darstellung den Markierungstext entfernst. Ebenso könntest Du dann in den ItemSelected-Codeblöcken reflektieren, ob diese Markierung - die man nicht sieht - enthalten ist. Feddisch.
Herzlich,
Tom
Tom
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: AChoice() -> ListBox()
Ownerdraw ist klar aber das mit der "Markierung" ... hm ...Tom hat geschrieben:Mit Ownerdrawing könntest Du Markierungen innerhalb der Listbox-Elemente abfangen (etwa ein Textstück anhängen, dessen Eingabe unwahrscheinlich ist - z.B. "[*]") und darauf reagieren,
schon deshalb dachte ich eher an ein "alCanSelect" Array.Tom hat geschrieben:indem Du beispielsweise ein helles Grau für die Darstellung der vermeintlich inaktiven Elemente wählst, aus denen Du vor der Darstellung den Markierungstext entfernst.
um ein Item aufzunehmen würde man ja
Code: Alles auswählen
Obj:AddItem(ctem)
Code: Alles auswählen
Obj:AddItem(cItem,lCanSelect)
klar das ich dann auch
Code: Alles auswählen
METHOD LfuCombobox:AddItem(cItem,lCanSelect)
METHOD LfuCombobox:clear()
METHOD LfuCombobox:delItem(nPos)
METHOD LfuCombobox:insItem( nPos, cItem ,lCanSelect)
da musste ich doch ein wenig "knobeln" mitTom hat geschrieben:Ebenso könntest Du dann in den ItemSelected-Codeblöcken reflektieren, ob diese Markierung - die man nicht sieht - enthalten ist. Feddisch.
Code: Alles auswählen
METHOD LfuCombobox:IsSelectable(nNo)
LOCAL lRet := .F.
//
// wäre recursive im Datalink
//
IF PCOUNT() = 0
nNo := ::getdata()[1]
ENDIF
IF VALTYPE(nNo) = "N"
IF nNo > 0 .AND. nNo <= LEN(::alCanSelect)
lRet := ::alCanSelect[nNo]
ENDIF
ENDIF
RETURN lRet
Code: Alles auswählen
IF ::oPreCombo:IsSelectable()
oder im o:datalink
::oPreCombo:XbpListbox:dataLink := ;
{ | a | IF( !EMPTY( a ), ;
::cPreCombo := IF(::oPreCombo:IsSelectable(a[ 1 ]),;
::oPreCombo:getitem ( a[ 1 ] ),;
"") , ;
{ ::cPreCombo } ) }
hier nun mal ein Demo warum ich die "ausgeblendeten" Elemente haben wollte
bei Start wird eine Test DBF angelegt. Man kann aber jede DBF als Parameter verwenden.
- Dateianhänge
-
- lfusuch4.zip
- benötigt SL1 v1.9.355 wegen Ownerdraw
- (62.74 KiB) 252-mal heruntergeladen
gruss by OHR
Jimmy
Jimmy