| |
|
|
- Página 1 - |
|
| Hör oft así algo como 1000 Buttonhandle en Arrays y frägt esta entonces en el Hauptschleife con mouseouver y clicked de.
Hierzu veces una Tip Yo algo como erledigen sería sin Bucle, also deutlich performant. KompilierenMarcaSeparación Das Ganze lässt se cualquier verbessern,- y jede mögliche Abprüfung derart integrieren. Statt simplemente el Buttonhandle en el gänzlich unbenutzte h a packen podría uno auch createbutton en un Función Trash umleiten trash(createbutton(hwnd,knop+str$(i),x,y,40,10)). Función trash podría una Liste con el Handles füllen y beim final des Programmes podría uno esta Liste para Destroywindows nutzen. Usw... Das wiederum mache Yo u.a. en el Source de okrea [...] antes. |
|
|
| |
|
|
|
| |
|
- Página 1 - |
|
Frank Abbing | In el Zusammenhang es Get/SetWindowLong con GWL_ID oder GWL_USERDATA interessant. Anhand uno dieser Speicherplätze kann cada Control erkannt voluntad, sin irgendwelche Umwege y wahrscheinlich todavía más rápido. Yo persönlich sería esta Weg ir. |
|
|
| |
|
|
|
| @Jörg: Rolf sería warscheinlich más que aquí interés: [...] (exe anhängig)
@Franco: Natürlich Tuve auch a gwl_userdata pensamiento. Hiermit wäre lo auch posible en/por gwl_userdata wiederum el Handle uno más Controls abzuspeichern welches wiederum todavía viel mehr Daten tragen podría. (z.B. ne ListBox)
Tuve el Umweg gewählt como dieser auch así unos pocos xprofansche Problemfälle demonstriert y zeigt el lo para manche Aufgaben vlt. vorgefertigte Nativo (en XProfan eingebaute) Lösungen geben debería.
Nach gwl_userdata sería el así aussehen: KompilierenMarcaSeparación//Version:0.0.1
{$cleq}
const maxNumObjects=1000
set(ErrorLevel,0)
lm_{;return if(getasynckeystate(1)==0,false,true);}// lm steht für leftMouse(pressed)
declare objekt.H&[maxNumObjects],
objekt.X&[maxNumObjects],
objekt.Y&[maxNumObjects],
objekt.XX&[maxNumObjects],
objekt.YY&[maxNumObjects],
objekt.T$[maxNumObjects]
windowstyle 8 | 16 | 512
cls
//decimals 0 damit das unten genutzte str$ keine Kommazahlen auswirft
decimals 0
long x,
y,
h,
i,
//hier erstellen wir die buttons mal, auch wenn Du die sicher anders erzeugst:
usefont MS Sans Serif,10,0,0,0,0
setdialogfont 1
sendmessage(hwnd,wm_setredraw,0,0)//damits controlerstellen schneller geht anzeige abschalten
for y:=0 to height(hwnd) step 15 do begin
for x:=0 to width(hwnd) step 40 do begin
//handle im Array merken - tust du ja auch
h=createstatic(hwnd,str$(i),x,y,39,14)
// hier trick 15 wir merken uns die ID auch im string und nutzen eine Helferfunktion
i+
objekt.pushID(i,h,x,y,39,14)
/* natürlich ist der Umweg über long h hier unnötig, man könnte auch direkt
objekt.pushID(i,createbutton(hwnd,knop+str$(i),x,y,40,10))
schreiben, wäre aber net so anschaulich */
end
end
sendmessage(hwnd,wm_setredraw,1,0)//nun wieder alles anzeigen und neuzeichnen
invalidateRect(hwnd,0,0)
updatewindow(hwnd)
//Hauptereignisschleife
usermessages wm_close,wm_lbuttondown,wm_keydown
do {
getmessage
select umessage//select Konstrukt damit umessage auch nur einmal geprüft wird und sich - warum auch immer - später ruhig ändern könnte ohne das wir falsch reagieren würden
caseof wm_close:break
caseof wm_lbuttondown:klickProc()// hier in der bildlich benannten Klickprog schauen wir ob ein Control verschoben werden möchte
caseof wm_keydown:keybProc()
endselect
}
end//ende
objekt.pushID(long n,h,x,y,xx,yy){
objekt.H&[n]=h
objekt.X&[n]=x
objekt.Y&[n]=y
objekt.XX&[n]=xx
objekt.YY&[n]=yy
objekt.T$[n]=BLUB von +str$(n)
setwindowlong(h,gwl_userdata,n)
}
objekt.h2ID(long h){//der rückweg über gwl_userdata
return getwindowlong(h,gwl_userdata)
}
objekt.moveTo(long item,_dx,_dy){
long h=objekt.h&[item]
objekt.x&[item]=objekt.x&[item]+_dx
objekt.y&[item]=objekt.y&[item]+_dy
setwindowpos h=objekt.x&[item],objekt.y&[item] - objekt.xx&[item],objekt.yy&[item];0
invalidaterect(h,0,0)
updatewindow(h)
}
keybProc{
//wurde eines unserer Objekte bemaust? Holen wir uns erstmal das Handle des Controls:
long h=childWindowFromPoint(hwnd,mousex,mousey)// control unter maus?
long item=objekt.h2ID(h)//hiermit haben wir jetzt in H die ArrayItemID
case item<1 : return false/*kein static geklickt?*/
case getasynckeystate(37)<0 : objekt.moveTo(item,-2,0)
case getasynckeystate(38)<0 : objekt.moveTo(item,0,-2)
case getasynckeystate(39)<0 : objekt.moveTo(item,2,0)
case getasynckeystate(40)<0 : objekt.moveTo(item,0,2)
//erstmal umessage per dulcoiF löschen - wichtig! @ Roland: umessage löschen können!
settimer 1;waitinput;killtimer
//weiter:
}
klickProc{
//erstmal umessage per dulcoiF löschen - wichtig! @ Roland: umessage löschen können!
settimer 1;waitinput;killtimer
//weiter:
//wurde eines unserer Objekte angeklickt? Holen wir uns erstmal das Handle des geklickten Controls:
long h=childWindowFromPoint(hwnd,mousex,mousey)// control unter maus?
long item=objekt.h2ID(h)//hiermit haben wir jetzt in H die ArrayItemID
case item<1 : return false/*kein static geklickt?*/
settext hwnd,objekt.t$[item]
//objekt nach vorne holen in der anzeigehirarchie
destroywindow(h)
h=createstatic(hwnd,str$(item-1),objekt.x&[item],objekt.y&[item],39,14)
objekt.h&[item]=h
setwindowlong(h,gwl_userdata,item)
//verschiebezeugs
long xd:=mousex-objekt.x&[item],yd:=mousey-objekt.y&[item]//xy differenz vom maus zu objektUrsprung merken
while lm_() {
objekt.x&[item]=(mousex-xd)
objekt.y&[item]=(mousey-yd)
setwindowpos h=objekt.x&[item],objekt.y&[item] - objekt.xx&[item],objekt.yy&[item];0
invalidaterect(h,0,0)
updatewindow(h)
}
volver item
}
|
|
|
| |
|
|
|
Rolf Koch | Yo saber el doch ya. Aussderdem es por el geniale Umsetzung de Andreas Miethe doch una ansehliche Steuerung drin |
|
|
| |
|
|
| |
|
- Página 2 - |
|
|
| El aber ya algo hakelig es musste zugeben. |
|
|
| |
|
|
|
Rolf Koch | Nee IF Butterweich. ^ ^ Nee echt. Hackelig sólo, si uno bajo Setup Am Raster ausrichten gewählt ha. Grad otra vez gekuckt. Blubbbbb como Sahne sin a mucken! |
|
|
| |
|
|
|
| Ne Yo mi lo reagiert no wirklich correcto - z.B. si uno simplemente el ratón una Control wegdraggen möchte. Man muss sólo marca, entonces puede ser bewegen/skalieren. Irgendwie es siempre una Schritt a viel nötig. (Hatte Yo ya siempre bemängelt ^ ^) |
|
|
| |
|
|
|
Rolf Koch | Jo überredet muss Yo otra vez ran ^ ^ Referencia: Gehts hier en Roc? *lol* |
|
|
| |
|
|
|
| Jetzt ya |
|
|
| |
|
|
|
GDL | Super, entonces half mein Posting en RGH todavía wem. Wenn Yo auch ahora una wenig detrás de él kam como va, en mi Source bekomm Yo no en el Reihe.
Servus Georg |
|
|
| |
|
|
|
GDL | Hi
IF ser Eingangsposting se ejecuta en me bajo Xprofan 11 no mehr. Lo se kein ausgewähltes Objeto en el Fenstertitelseite mehr adecuado.
Mag el alguien con Xprofan 11 veces testen.Gracias.
Servus Georg |
|
|
| |
|
|
|
| Teste otra vez, el Quelltextvorschau hats verbockt ca. Umbauten. |
|
|
| |
|
|
|
GDL | |
|
| |
|
|