| |
|
|
- Seite 1 - |
|
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 |
|
|
| |
|
|
|
| |
|
- Seite 2 - |
|
Rolf Koch | parent enthält den Wert 0 |
|
|
| |
|
|
| |
|
- Seite 3 - |
|
|
| KompilierenMarkierenSeparieren Zur Info: Hier wird FindWindowExA aufgerufen. Für 65556 könnte man auch %Desktop schreiben und auf %Desktop befinden sich in der Regel mehrere Fenster dieser Klasse (siehe Tasks and Token).
Da ich kein XProfan10 habe, gebe ich die weitere Ursachenforschung erst mal an die anderen ab. |
|
|
| |
|
|
|
| Ach ja - und %Desktop ist natürlich nicht auf jedem System 65556 - wie gesasgt, etwas windig der Code.... |
|
|
| |
|
|
|
Ralph Theobald | Hallo ,
wer wird denn gleich in die Luft gehen .
Vielen Dank erstmal an alle für die rege Teilnahme an dem Problem.
If ich habe deinen Code etwas modifiziert. Im Interpreter laufen die beiden Versionen zwar unterschiedlich, aber sie laufen. Kompiliert sind sie glaube ich nicht zu gebrauchen 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)
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)
WAITINPUT
var S$=
IF GETCURSEL(HGRID&)>-1
S$=GETSTRING$(HGRID&,GETCURSEL(HGRID&))
ENDIF
DESTROYWINDOW(HGRID&)
Combobox_if1 DESTROYWINDOW(HGRID&) auskommentiert
Combobox_if2 DESTROYWINDOW(HGRID&) im code enthalten
IFNOT S$=
LOCATE 20,1
PRINT Ausgewählt: ,S$
ENDIF
endproc
Gruß Ralph |
|
|
| |
|
|
|
Ralph Theobald | An alle,
die beiden obigen Versionen laufen nur unter Win XP, Xprofan 10 Bei einer Version erscheint die Listview, man klickt einen Eintrag an,das Ergebnis wird angezeigt.die Box klappt wieder ein.
Bei der anderen Version kann man die Spaltenbreite verstellen , ein Ergebnis wird ausgegeben, aber nur einmal.
Beides zusammen wäre ideal.
Compilat: 1: LV wird angezeigt, Einträge lassen sich auswählen , werden aber nicht ausgegeben
Compilat 2: Ausgabe erfolgt nur nach jedem 3. Klick,
Unter Xprofan 8 , w2k klappt die box nur kurz auf
Gruß Ralph |
|
|
| |
|
|
|
RGH | Ralph Theobald
Unter Win2k , Xprofan 8 wie bei Andreas .
Mich wundert es nicht, daß Gridboxen nicht unter XProfan 8 funktionieren, da es die erst seit XProfan 10 gibt!
Roland |
|
|
| Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 08.03.2007 ▲ |
|
|
|
|
| RGH
Mich wundert es nicht, daß Gridboxen nicht unter XProfan 8 funktionieren, da es die erst seit XProfan 10 gibt! Roland
Auch die mit XProfan10 compilierte EXE geht da nicht (du Scherzkecks du ) |
|
|
| |
|
|
|
| Herjeh es ging mir in erster Linie darum auf eine Lösung mit Usermessages umzustellen, %desktop habe ich nicht mit 65556 gemeint - hab hier in der Eile zu flüchtig recherchiert. |
|
|
| |
|
|
|
Ralph Theobald | Wenn ich ein gridbox z.B. in eine Rebar setze, übernimmt Windows die Verwaltung des Controls , sobald ich es anklicke.
Ich habe mir das Handle der Listbox durch das Callback besorgt.Wenn jemand eine andere Möglichkeit kennt , dann her damit.
Ich werde es mal noch mit der Listview.dll probieren, aber das geht wahrscheinlich auch nicht.
Als Lösung kann ich mir nur vorstellen:
1. Ausgabe innerhalb der Callbackroutine. (zu aufwendig) 2. Das Handle der Listbox ohne Callback (wie?) ,dann müsste Ifs Methode ohne diesen ominösen Call klappen !?
Es wundert mich nicht ,dass es bei der Programmierung der Controls in Windoof offensichtlich keinen roten Faden gibt. Beim Rebar setzt man das Control ins Band , Windows passt automatisch die Größe des Controls an die Größe des Bandes an.Bei der Choicebox funktioniert das so nicht. Was für einen Sinn macht dann der Befehl Setparent ?
Gruß Ralph |
|
|
| |
|
|
|
|
Das Handle der Listbox ohne Callback (wie?) ,dann müsste Ifs Methode ohne diesen ominösen Call klappen !?
Ich wüsste evtl. wie, kann ich aber nicht testen - kein XP und kein XProfan10, sorry. Und wenn man auf meine Bemühungen von denen ich persönlich nichts habe nicht reagiert, habe ich auch irgendwann keine Lust mehr - ist doch einsehbar - oder? Tschau.
PS: Ein Tool, das zum Beispiel bei der Entwicklung solcher solchen sehr gute Dienste Leisten könnte, wäre Tasks and Token - da sieht man ziemlich genau wo es windig wird und warum. |
|
|
| |
|
|
|
Ralph Theobald | Hallo Andreas, Entschuldigung , aber ich wollte dich nicht übergehen.Ich habe mich bei allen bedankt die mir geholfen haben.Damit meinte ich auch dich. Leider bin ich nicht so ein begnadeter Programmierer wie die meisten hier, deshalb frage ich ja. Zu Task & Token : Ich habe mir das Programm installiert, aber ich betreibe Profan nur als Hobby, deshalb brauche ich immer etwas länger um mich in die neuen Programme einzuarbeiten.Ich habe mit Spy++ versucht die Messages abzufangen, aber ohne Erfolg. Ich sehe das Ganze übrigens genau wie Du, möglichst keine undokumentierten Befehle oder Tricksereien, die nur auf einem Rechner,einem Betriebssystem oder einer xprofanversion laufen herzustellen.
Vielen Dank
Ralph |
|
|
| |
|
|
|
| |
|
| |
|
|