Français
Forum

Wunsch: ListBox OwnerDraw SubClass

 
mon Frage à Andreas Miethe, quoi richtigerweise chez funzt stehen pourrait, um cela Malen aller individuel Einträge qui ListBox avec cela selbst trop prendre, dass un hPic gezeichnet wird statt z.B. qui Eintragstext.
KompilierenMarqueSéparation
 
20.02.2009  
 




Andreas
Miethe


allô @IF

Habe encore un kleines Problem beim Starten per Interpreter, la fois ne kleine récréation faire, la plus part du temps hilft cela.
KompilierenMarqueSéparation
Header-Dateien
 $H windows.ph
 $H messages.ph
Strukturen
Struct RECT = Left&,Top&,Right&,Bottom&
Struct DRAWITEMSTRUCT = CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,rcItem!RECT,itemData&
Declare lpdis#,Rect#,h&
Dim lpdis#,DRAWITEMSTRUCT
Dim Rect#,RECT
var hPic&=create(hNewPic,15,15,$1278FF)
cls ~GetSysColor(~COLOR_BTNFACE)
subClass %hwnd,1
h& = Control(LISTBOX,,~WS_BORDER | ~WS_CHILD | ~WS_VISIBLE | ~LBS_OWNERDRAWFIXED | ~LBS_HASSTRINGS | ~LBS_STANDARD ,10,10,200,200,%hwnd,0,%hInstance,0)
SendMessage(h&, ~LB_SETITEMHEIGHT,0,Makelong(18,0))
Var Item& = AddString(h&,Hallo Welt)
SendMessage(h&,~LB_SETITEMDATA,Item&,hPic&)
Item& = AddString(h&,Hallo Welt 2)
SendMessage(h&,~LB_SETITEMDATA,Item&,hPic&)
AddString(h&,Hallo Welt 3)
Warum geht es mit dem Interpreter erst, wenn ich in die Listbox klicke ?
Als Kompilat funktioniert es !
Habe ich heute ein Brett vorm Kopf ?
Var Ende& = 0

Whilenot Ende&

    WaitInput

EndWhile

end

SubClassProc

    If SubClassMessage(%hwnd,~WM_DRAWITEM)

        lpdis# = &slParam
        Var Text$ = GetString$(lpdis#.hwndItem&,lpdis#.itemID&)
        Var hbmpPicture& = SendMessage(lpdis#.hwndItem&,~LB_GETITEMDATA, lpdis#.itemID&,0)
        Var hdcMem& = ~CreateCompatibleDC(lpdis#.hdc&)
        Var hbmpOld& = ~SelectObject(hdcMem&, hbmpPicture&)
        lpdis#.rcItem!left&= lpdis#.rcItem!left& + 20
        Rect#.Left& = lpdis#.rcItem!left&
        Rect#.Top& = lpdis#.rcItem!Top&
        Rect#.Right& = lpdis#.rcItem!Right&
        Rect#.Bottom& = lpdis#.rcItem!Bottom&
        ~DrawText(lpdis#.hdc&, Addr(Text$), Len(Text$), Rect#,0)
        ~BitBlt(lpdis#.hdc&, lpdis#.rcItem!left&-20, lpdis#.rcItem!top&, lpdis#.rcItem!right& - lpdis#.rcItem!left&,lpdis#.rcItem!bottom& - lpdis#.rcItem!top&, hdcMem&, 0, 0, ~SRCCOPY)
        ~SelectObject(hdcMem&, hbmpOld&)
        ~DeleteDC(hdcMem&)
        Set(WinProc, 1)

    EndIf

ENDPROC

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
21.02.2009  
 



Wow dankesehr Schonmal - so vois je sur jeden le cas comme gedacht ist.

si je quelque chose zum Interpreter herausfind...
 
21.02.2009  
 




Jörg
Sellmeyer
chez mir knallts ici:
KompilierenMarqueSéparation
~DrawText(lpdis#.hdc&, Addr(Text$), Len(Text$), lpdis#.rcItem,0)
>

Ca. la ligne 42
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
21.02.2009  
 




Andreas
Miethe


Jörg Sellmeyer
chez mir knallts ici:
KompilierenMarqueSéparation
~DrawText(lpdis#.hdc&, Addr(Text$), Len(Text$), lpdis#.rcItem,0)
>

Ca. la ligne 42


allô Jörg,

cela scheint à qui direkten Übergabe qui Rechteckstruktur dans qui Drawitem-Struktur trop liegen.
HH hatte aussi cela Problem chez Ownerdraw-Menüs. pourquoi cela chez mir klappt et chez andern pas ? je n'en sais rien.
Habe den Code dahingehend abgeändert, sollte maintenant marcher.
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.02.2009  
 




Jörg
Sellmeyer
je hatte encore pas 11.1 sur elle! Steoll doch nochmal den originalen Code rein - peut-être lag es daran.
@Horst - quelle Version la hâte Du?
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.02.2009  
 




Andreas
Miethe


allô Jörg,

ici nochmal cela Original.
KompilierenMarqueSéparation
Header-Dateien
 $H windows.ph
 $H messages.ph
Strukturen
Struct RECT = Left&,Top&,Right&,Bottom&
Struct DRAWITEMSTRUCT = CtlType&,CtlID&,itemID&,itemAction&,itemState&,hwndItem&,hDC&,rcItem!RECT,itemData&
Declare lpdis#,Rect#,h&,WP#
Dim lpdis#,DRAWITEMSTRUCT
var hPic&=create(hNewPic,15,15,$1278FF)
cls ~GetSysColor(~COLOR_BTNFACE)
subClass %hwnd,1
h& = Control(LISTBOX,,~WS_BORDER | ~WS_CHILD | ~WS_VISIBLE | ~LBS_OWNERDRAWFIXED | ~LBS_HASSTRINGS | ~LBS_STANDARD | ~LBS_NOTIFY,10,10,200,200,%hwnd,0,%hInstance,0)
SendMessage(h&, ~LB_SETITEMHEIGHT,0,Makelong(18,0))
Var Item& = AddString(h&,Hallo Welt)
SendMessage(h&,~LB_SETITEMDATA,Item&,hPic&)
Item& = AddString(h&,Hallo Welt 2)
SendMessage(h&,~LB_SETITEMDATA,Item&,hPic&)
AddString(h&,Hallo Welt 3)
Warum geht es mit dem Interpreter erst, wenn ich in die Listbox klicke ?
Als Kompilat funktioniert es !
Habe ich heute ein Brett vorm Kopf ?
Var Ende& = 0

Whilenot Ende&

    WaitInput

EndWhile

end

SubClassProc

    If SubClassMessage(%hwnd,~WM_DRAWITEM)

        lpdis# = &slParam
        Var Text$ = GetString$(lpdis#.hwndItem&,lpdis#.itemID&)
        Var hbmpPicture& = SendMessage(lpdis#.hwndItem&,~LB_GETITEMDATA, lpdis#.itemID&,0)
        Var hdcMem& = ~CreateCompatibleDC(lpdis#.hdc&)
        Var hbmpOld& = ~SelectObject(hdcMem&, hbmpPicture&)
        lpdis#.rcItem!left&= lpdis#.rcItem!left& + 20
        ~DrawText(lpdis#.hdc&, Addr(Text$), Len(Text$), lpdis#.rcItem,0)
        ~BitBlt(lpdis#.hdc&, lpdis#.rcItem!left&-20, lpdis#.rcItem!top&, lpdis#.rcItem!right& - lpdis#.rcItem!left&,lpdis#.rcItem!bottom& - lpdis#.rcItem!top&, hdcMem&, 0, 0, ~SRCCOPY)
        ~SelectObject(hdcMem&, hbmpOld&)
        ~DeleteDC(hdcMem&)
        Set(WinProc, 1)

    EndIf

ENDPROC

 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.02.2009  
 




Jörg
Sellmeyer
Mh - seltsam. Im Interpreter knallts pas, dans compilierter forme déjà. Allerdings zeigt chez mir qui Runtime toujours 11.0 à et qui Interpreter 11.1, quoique je alle Fichiers aus dem letzten(?) Update vom 2.12. sur elle habe.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.02.2009  
 




Andreas
Miethe


ensuite ist quoi schiefgelaufen chez Deinem Update. mon Runtime zeigt korrekt 11.1 à.

Dateidatum Runtime, Interpreter et Compiler 26.11.2008 11:01
 
Gruss
Andreas
________ ________ ________ ________ _
Profan 3.3 - XProfanX2
Win 95,98,ME,2000,XP,Vista - Win 7 32 / 64 Bit
ASUS X93S - Intel Core I7-NVIDIA GForce 540M 8GB Arbeitsspeicher
Homepage :  [...] 
22.02.2009  
 




Jörg
Sellmeyer
Ok - maintenant hab ego aussi. Hatte oublier qc dans den Projekteinstellungen qui neue Runtime anzugeben. Läuft alors jusqu'à sur qui Interpreter-/Runtime-Seltsamigkeit, qui Du dessus erwähnt la hâte.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
22.02.2009  
 



cela Beispiel zeigt, dass es tant pis ist, dass qui SubClassProc seulement im WaitInput greift.

Werden im Programmablauf zunächst qui Listboxen erzeugt et befüllt, wonach ensuite qui Hauptschleife avec WaitInput erreicht wird.

Weil qui Nouvelles verloren sommes, volonté zunächst aucun Items dargestellt.

446 kB
Kurzbeschreibung: sans nachträgliches Anschubsen
Hochgeladen:02.03.2009
Downloadcounter103
Download
446 kB
Kurzbeschreibung: avec nachträglichem Anschubsen
Hochgeladen:02.03.2009
Downloadcounter77
Download
448 kB
Kurzbeschreibung: nachträgliches Anschubsen quelquefois wirkungslos
Hochgeladen:02.03.2009
Downloadcounter96
Download
 
02.03.2009  
 



Hmpf, aussi si je z.B. wm_drawItem zusätzlich comme UserMessage deklariere um qui Hauptschleife mitzuteilen, dass dans ListBoxen Einträge trop zeichnen wären, ensuite erhalte je (naturellement) weder dans uwnd, ulparam encore uwparam une brauchbare Info - sodass je récente zeichnen pourrait.

Könnte on _nur dedans qui subClassProc et dedans des waitInput addString anweisen sodass qui Einträge aussi angezeigt volonté. :/

je teste la fois, si on wm_command comme UserMessage nutzen peux - sollte oui chez lbs_notfiy versandt volonté avec Handle qui ListBox im ulParam.

Nachtrag: wm_command wird pas ausgelöst de addString - ldr. (aussi) aucun Solution.
 
02.03.2009  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

11.632 Views

Untitledvor 0 min.
Manfred Barei28.12.2020
Normann Strübli24.03.2020
Rainer Hoefs12.05.2019
Member 154727723.09.2018
plus...

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie