| |
|
|
Ralph Theobald | Hallo ,
ich habe eine Gridbox in eine Choicebox gebastelt , leider ist die Gridbox nicht erreichbar, wie kann ich diese aktivieren. KompilierenMarkierenSeparierenSet(FastMode,1)
$H windows.ph
$H messages.ph
Declare oldcallback&,static&,brush&,raus&,hGrid&,titel$
cls
oldcallback&=~SetWindowLong(%hwnd,~GWL_WNDPROC,ProcAddr(newcallback,4))
static&=Create(choicebox,%hwnd,Choicebox,16,16,560,180)
WhileNot raus&
WaitInput
EndWhile
End
PROC setcolor
Parameters col&,bk&,wParam&
declare Brush&
IF Brush&
~DeleteObject(Brush&)
endif
Brush& = ~CreateSolidBrush(bk&)
~SetBkMode(wParam&, ~TRANSPARENT)
~SetBKColor(wParam&,RGB(195,116,95))
~SetTextColor(wParam&,col&)
RETURN Brush&
endproc
Proc newcallback
Parameters wnd&,msg&,wparam&,lparam&
IF msg&=~WM_CTLCOLOREDIT
RETURN SetColor(rgb(255,0,0),rgb(255,255,0),wParam&)
Endif
IF msg&=~WM_CTLCOLORLISTBOX
Titel$ = Links;0;80;Mitte;2;100;Rechts;1;80
hGrid&=Create(GridBox,lparam&, Titel$, 3,1,1,549,140)
AddString(hGrid&, AB|DEF|0123)
AddString(hGrid&, GHI|J23KL|012345)
IF brush&
~DeleteObject(brush&)
EndIf
brush&=~CreateSolidBrush(Rgb(0,0,255))
RETURN brush&
Endif
If msg&=~WM_CLOSE
~DeleteObject(brush&)
raus&=1
Endif
RETURN ~CallWindowProc(oldcallback&,wnd&,msg&,wparam&,lparam&)
EndProc
Gruß Ralph |
|
|
| |
|
|
|
| Beim Klick auf die Choicebox erhalte ich leider nur einen Absturz. |
|
|
| |
|
|
|
Jörg Sellmeyer | iF
Beim Klick auf die Choicebox erhalte ich leider nur einen Absturz.
Interessant - bei mir nicht. Ich kann aber auch das Listview nicht anwählen. Sieht jedenfalls ganz lustig aus. Allerdings ist es fraglich, ob es in der Form irgendeinen Nutzen bringt. Du mußt ja das Control jedesmal neu erstellen. Bei umfangreichem Inhalt dürfte das ziemlich bremsen. Mehr fällt mir dazu leider nicht ein, da dies ganze Callback-Zeugs mir immer Kopfschmerzen bereitet. Gruß Jörg |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 08.03.2007 ▲ |
|
|
|
|
| Jupp - Callbacks in XProfan sind leider aufgrund dessen das ProcAddr noch ungestackt arbeitet nicht empfehlenswert und werden somit immer Probleme bereiten. Vielleicht gibts in X11 Abhilfe. |
|
|
| |
|
|
|
Ralph Theobald | danke euch beiden,
Xprofan 10 hat ein Control (Dateedit) bei dem funktioniert der Focus auf dem Kalender. Vielleicht stimmt die Message in der Callbackroutine nicht . Werd mal noch ein wenig testen.
Gruß Ralph |
|
|
| |
|
|
|
| Ich hab ne Lösung - ganz ohne Fastmode und Procaddr.
Nur noch eine kleine Unstimmigkeit beheben... |
|
|
| |
|
|
|
| Sieht aus als ob: KompilierenMarkierenSeparieren {$cleq}
cls
long static=Create(choicebox,%hwnd,Choicebox,16,16,560,180)
usermessages 16,WM_CTLCOLORLISTBOX
do {
waitinput
select umessage
caseof 16 : break
caseof WM_CTLCOLORLISTBOX : proceedChoiceBox
caseof WM_CTLCOLOREDIT : break
otherwise
endselect
}
end
proceedChoiceBox {
string Titel:=Links;0;80;Mitte;2;100;Rechts;1;80
long parent=FindWindowExA(65556,0,ComboLBox,0)
showwindow(parent,0)
long hGrid=Create(GridBox,hwnd, Titel, 3,16,40,width(parent),height(parent))
sendkey(parent,27)
addString(hGrid,AB|DEF|0123)
addString(hGrid,GHI|J23KL|012345)
while getAsyncKeyState(1)<>0
wend
dulcoiF
waitinput
case getfocus(static) : sendkey(parent,27)
string s
if getCurSel(hGrid)>-1
s:=getstring$(hGrid,getCurSel(hGrid))
endif
destroywindow(hGrid)
ifnot s== {
locate 10,1
print Ausgewählt: ,s
}
}
dulcoiF { settimer 1;waitinput;killtimer }
Die Nichtxpsevariante: KompilierenMarkierenSeparierenDECLARE __cf1&,__cf2&
Def __cf1(2) !KERNEL32,GetProcAddress
Def __cf2(1) !KERNEL32,GetModuleHandleA
__cf1&=__cf1(__cf2(user32.dll),FindWindowExA)
__cf2&=__cf1(__cf2(user32.dll),GetAsyncKeyState)
CLS
var STATIC&=CREATE(choicebox,%HWND,Choicebox,16,16,560,180)
USERMESSAGES 16,$0134
WHILE 1
WAITINPUT
SELECT %UMESSAGE
CASEOF 16
BREAK
CASEOF $0134
PROCEEDCHOICEBOX
OTHERWISE
ENDSELECT
ENDWHILE
end
proc PROCEEDCHOICEBOX
var TITEL$=Links;0;80;Mitte;2;100;Rechts;1;80
var PARENT&=call(__cf1&,65556,0,ComboLBox,0)
SHOWWINDOW(PARENT&,0)
var HGRID&=CREATE(GridBox,%HWND, TITEL$, 3,16,40,WIDTH(PARENT&),HEIGHT(PARENT&))
SENDKEY(PARENT&,27)
ADDSTRING(HGRID&,AB|DEF|0123)
ADDSTRING(HGRID&,GHI|J23KL|012345)
WHILE call(__cf2&,1)<>0
ENDWHILE
DULCOIF
WAITINPUT
IF GETFOCUS(STATIC&)
SENDKEY(PARENT&,27)
ENDIF
var S$=
IF GETCURSEL(HGRID&)>-1
S$=GETSTRING$(HGRID&,GETCURSEL(HGRID&))
ENDIF
DESTROYWINDOW(HGRID&)
IFNOT S$=
LOCATE 10,1
PRINT Ausgewählt: ,S$
ENDIF
endproc
proc DULCOIF
SETTIMER 1
WAITINPUT
KILLTIMER
endproc
|
|
|
| |
|
|
|
| Ich würde daraus warscheinlich eine Klasse bauen um das Control mit einem einzelnen Aufruf zu Kontrollieren und mehrere davon erstellen zu können - aber das bleibt dann Dir überlassen. |
|
|
| |
|
|
|
| Hallo IF...
Habe bei mir unter Windows98 die EXE mal getestet - läuft nicht. Die Choicebox klappt sofort wieder zu und es ist nur ein Farbengewirr zu sehen. |
|
|
| |
|
|
|
| Schade mit Win98, habs natürlich für Windows-XP geschrieben und getestet. |
|
|
| |
|
|
|
| iF
Schade mit Win98, habs natürlich für Windows-XP geschrieben und getestet.
Oder evtl. nur für deinen Rechner oder für eine bestimmte Version der comctl32.dll? |
|
|
| |
|
|
|
| Auf einem XPHome und ein XPPro - beide Uptodate. |
|
|
| |
|
|