| |
|
|
- page 1 - |
|
| Hör souvent so quelque chose comment 1000 Buttonhandle dans Arrays et frägt cet ensuite dans qui Hauptschleife avec mouseouver et clicked ab.
Hierzu la fois un Tip comment je quelque chose comme erledigen serait sans Boucle, alors deutlich performant. KompilierenMarqueSéparation cela Ganze peut sich beliebig améliorer,- et chacun mögliche Abprüfung derart intégrer. Statt simple cela Buttonhandle ins gänzlich unbenutzte h trop saisir pourrait on aussi createbutton dans un Funktion Trash détourner trash(createbutton(hwnd,knop+str$(i),x,y,40,10)). Funktion trash pourrait une liste avec den Handles füllen et beim finissons des Programmes pourrait on cet liste pour Destroywindows nutzen. Usw... cela wiederum fais je u.a. im Source de okrea [...] avant. |
|
|
| |
|
|
|
| |
|
- page 1 - |
|
Frank Abbing | dans dem Zusammenhang ist Get/SetWindowLong avec GWL_ID ou bien GWL_USERDATA intéressant. Anhand einer cette Speicherplätze peux chaque Contrôle erkannt volonté, sans irgendwelche Umwege et wahrscheinlich encore plus rapide. je personnelle serait cette Weg aller. |
|
|
| |
|
|
|
| @Jörg: Rolf serait warscheinlich plutôt que voici intéresser: [...] (exe anhängig)
@Frank: Bien sûr J'ai eu aussi à gwl_userdata gedacht. Hiermit wäre es aussi possible dans/per gwl_userdata wiederum cela Handle eines weiteren Controls abzuspeichern welches wiederum encore viel plus données tragen pourrait. (z.B. ne ListBox)
je hatte den le détour gewählt là cette aussi so un paire xprofansche Problemfälle demonstriert et zeigt cela es pour manche Aufgaben vlt. vorgefertigte Native (dans XProfan eingebaute) Lösungen donner sollte.
Pour gwl_userdata serait cela so air: KompilierenMarqueSéparation//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)
}
return item
}
|
|
|
| |
|
|
|
Rolf Koch | je connais cela doch déjà. Aussderdem ist par qui geniale Umsetzung de Andreas Miethe doch une ansehliche Contrôle drin |
|
|
| |
|
|
| |
|
- page 2 - |
|
|
| qui mais déjà quelque chose hakelig ist musste zugeben. |
|
|
| |
|
|
|
Rolf Koch | Nee iF Butterweich. ^ ^ Nee vraie. Hackelig seulement, si on sous Setup Am Raster ausrichten gewählt hat. Grad nochmal gekuckt. Blubbbbb comment la crème sans mucken! |
|
|
| |
|
|
|
| Ne je mon es reagiert pas wirklich richtig - z.B. si on avec qui souris simple un Contrôle wegdraggen voudrais. on muss seulement markieren, ensuite peux on bewegen/skalieren. Irgendwie ist toujours un Schritt trop viel nötig. (Hatte je déjà toujours bemängelt ^ ^) |
|
|
| |
|
|
|
Rolf Koch | Jo überredet muss je nochmal ran ^ ^ Hinweis: Gehts ici um Roc? *lol* |
|
|
| |
|
|
|
| maintenant déjà |
|
|
| |
|
|
|
GDL | Super, ensuite half mon Posting chez RGH doch encore wem. si je aussi maintenant un peu derrière elle kam comme allez, dans mon Source bekomm je es pas sur qui Reihe.
salut Georg |
|
|
| |
|
|
|
GDL | Hi
iF son Eingangsposting fonctionne chez mir sous Xprofan 11 pas plus. Es wird ne...aucune ausgewähltes objet dans qui Fenstertitelseite plus angezeigt.
Mag cela quelqu'un avec Xprofan 11 la fois testen.merci.
salut Georg |
|
|
| |
|
|
|
| Teste nochmal, qui Quelltextvorschau hats verbockt GT. Umbauten. |
|
|
| |
|
|
|
GDL | |
|
| |
|
|