AChoice() -> ListBox() [erledigt]

Eigentlich ist mir die Frage peinlich, aber es kann sonst niemand helfen ... :)

Moderator: Moderatoren

Antworten
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

AChoice() -> ListBox() [erledigt]

Beitrag von AUGE_OHR »

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 ?
Zuletzt geändert von AUGE_OHR am Sa, 03. Dez 2011 7:53, insgesamt 1-mal geändert.
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
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()

Beitrag von AUGE_OHR »

hm ... im Demo C:\ALASKA\XPPW32\Source\samples\basics\OWNERDRW\COLORBOX.prg

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
aber 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

Code: Alles auswählen

oListbox:Disable()
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... :-k

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
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
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()

Beitrag von Tom »

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.
Herzlich,
Tom
Benutzeravatar
AUGE_OHR
Marvin
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()

Beitrag von AUGE_OHR »

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,
Ownerdraw ist klar aber das mit der "Markierung" ... hm ... :-k
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.
schon deshalb dachte ich eher an ein "alCanSelect" Array.

um ein Item aufzunehmen würde man ja

Code: Alles auswählen

   Obj:AddItem(ctem)
schreiben. wenn ich das nun "erweitere" zu

Code: Alles auswählen

   Obj:AddItem(cItem,lCanSelect)
dann wäre ich ja "rückwärts kompatible" ;)
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)
benötige
Tom hat geschrieben:Ebenso könntest Du dann in den ItemSelected-Codeblöcken reflektieren, ob diese Markierung - die man nicht sieht - enthalten ist. Feddisch.
da musste ich doch ein wenig "knobeln" mit

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
denn ich verwende es 2 x

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 } ) }
wo ich die Nummer übergebe muss

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.
FilterLogic.JPG
FilterLogic.JPG (22.7 KiB) 3348 mal betrachtet
Dateianhänge
lfusuch4.zip
benötigt SL1 v1.9.355 wegen Ownerdraw
(62.74 KiB) 252-mal heruntergeladen
gruss by OHR
Jimmy
Antworten