| |
|
|
 GDL | Hi, ich habe nen Adressenproblem mit den Objekthandles,da ich festzugewiesene Werte brauche.In etwa so:
handle1&=create(button,%hwnd,..................................) handle1&=1000
oder handle1&=1000 1000=create(button................................)
Ich brauche dies desshalb,da die Objekte von aussen(hardwaremässig) und intern(Maus) gesteuert werden müssen und der Focus der Objekte gleichzeitig die Adressennummer für eine Hardwaresteuerung sind. Kurz gesagt: Die Handlenummer muss fest zugeordnet werden und bei jeden Programmstart immer gleich sein.
Dies war unter DOS Zeiten relativ einfach, da man sich in der config.sys EMS Speicher beim Starten des PC reservieren konnte und mit Powerbasic(DOS Vers.) darauf zugreifen konnte.Vielleicht geht dies mit Windows und XProfan ja auch?
Servus Georg |
|
|
| |
|
|
|
 Thorsten Friedrichs | Hallo. Also leider habe ich noch nicht ganz verstanden was du machen willst. Was willst du denn womit steuern? Soll deine Hardware im Programm was steuern oder soll das Programm was steuern?
Meines wissens nach geht das nicht mit festen Handles. DOS kannte diese Art Handleverwaltung soweit ich weiß gar nicht und wenn doch,dann war das schon sie wie jetzt bei Windows. Die Vergabe der Handles übernimmt Windows dynamisch, da kann man auch nichts drann ändern. Das geht einfach nicht. Aber da du das Handle erhälst, kannst du dieses natürlich an ein anderes Programm übergeben.
Vielleicht haben wir ja ne Idee wie du das was du willst gestallten kannst, aber momentan weiß ich allerdings noch nicht was du machen willst.
Gruß Toshy |
|
|
| ------------------------------------------------------------------------------------------ XProfan 9/Win98&undWinXP/PRFellow/ TCP.DLL Profaner seit 4.5 /einige Jahre (mit Programmierpausen) | 22.02.2006 ▲ |
|
|
|
|
 | Du wirst die tatsächlichen Handles den Wunschhandels halt nachträglich zuordnen müssen... |
|
|
| |
|
|
|
 GDL | Hallo,
@Toshi Richtig, unter DOS gab es keine Handles.Da das Programm aber immer im selben Speicherbereich lief hatte man immer dieselben Speicheradressen zum Abfragen.
Gebraucht wird das ganze zur parallelen Tastenabfrage (Weichenpult und Bildschirm), wobei jede Taste einen anderen Datensatz aus einer Datei lädt.Da die Hardwaretasten eine feste Adresse über eine Matrix liefern wäre es halt schön gewesen den Bildschirmcontrols selbigen Wert zu geben und diesen mit getfocus einfachst abzufragen.
@If Ich habe es fast schon befürchtet dass es nur so geht.Habe auch schon so angefangen nur bei 2400 möglichen Tasten gehoft ne andere Möglichkeit zu finden.
na gut dann weisen wir beim Programmaufruf jedem Bildschirmcontrol nen Arraywert zu.
Servus Georg |
|
|
| |
|
|
|
 | Mach doch ein Trick!
Nimm Gettext - und bestücke die Texte der Controls... |
|
|
| |
|
|
|
 Frank Abbing | Hi,
noch besser ist aber, du speicherst den Wert unter GWL_USERDATA mittels SetWindowLong(). Auslesen geht dann sehr einfach mit GetWindowLong(). |
|
|
| |
|
|
|
 GDL | Hallo Frank,
mal abgesehen von den Handles, aber da sprichst du eine ganz grosse Schwachstelle von mir an. Auf die Gefahr hin ausgelacht zu werden aber ich checke dies mit den Setwindowlong und co überhaupt nicht.Ich habe mal versucht den Code Snippet Animierte Fenster zu verstehen.Fehlanzeige ich kapier die Funktionsabläufe der einzelnen Befehle einfach net.
Servus Georg |
|
|
| |
|
|
|
 Frank Abbing | Hi,
warum sollte dich jemand auslachen? Hier mal ein Anwendungsbeispiel: KompilierenMarkierenSeparierenDeclare button&,sthand&
Def GetWindowLong(2) !"USER32","GetWindowLongA"
Def SetWindowLong(3) !"USER32","SetWindowLongA"
Cls
button&=Create("Button",%hwnd,"Test",32,32,80,24)
SetWindowLong(button&,-21,1000)
sthand&=GetWindowLong(button&,-21)
Print "Statischer Handle = "+Str$(sthand&)
WaitInput
End
GWL_USERDATA (-21) ist genau für diesen Fall gedacht, nämlich einem Fensterobjekt Gelegenheit zu geben, einen userspezifischen Wert zu sichern. |
|
|
| |
|
|
|
 GDL | Hallo Frank,
es funzt.In etwa so wird es eingebaut. KompilierenMarkierenSeparierenDeclare Button&[2450],Sthand&,ende%,adresse&,nummer%,y%,num%
Def Getwindowlong(2) !"USER32","GetWindowLongA"
Def Setwindowlong(3) !"USER32","SetWindowLongA"
window 0,0 -1024,748
y%=10
clear nummer%
whilenot y% > 600
Button&[nummer%]=Create("Button",%Hwnd,"Test "+str$(nummer%),32,y%,150,24)
Setwindowlong(Button&[nummer%],-21,(1000+nummer%))
y%=y%+30
inc nummer%
wend
whilenot ende%
clear num%
Waitinput
whilenot num% > nummer%
if getfocus(button&[num%])
adresse&=Getwindowlong(Button&[num%],-21)
drawtext 400,300,"aktuelle Adresse = "+str$(adresse&)+" "
endif
inc num%
wend
wend
KompilierenMarkierenSeparieren!
Declare Button&[2450],Sthand&,ende%,adresse&,nummer%,y%,num%
Def Getwindowlong(2) !"USER32","GetWindowLongA"
Def Setwindowlong(3) !"USER32","SetWindowLongA"
window 0,0 -1024,748
y%=10
clear nummer%
whilenot y% > 600
Button&[nummer%]=Create("Button",%Hwnd,"Test "+str$(nummer%),32,y%,150,24)
Setwindowlong(Button&[nummer%],-21,(1000+nummer%))
y%=y%+30
inc nummer%
wend
whilenot ende%
clear num%
Waitinput
whilenot num% > nummer%
if getfocus(button&[num%])
adresse&=Getwindowlong(Button&[num%],-21)
drawtext 400,300,"aktuelle Adresse = "+str$(adresse&)+" "
endif
inc num%
wend
wend
Bin wieder einen Schritt weiter.Mal guggen wie ich es weiter löse.
Servus Georg |
|
|
| |
|
|
|
 Frank Abbing | Hi,
na siehste. Und keine Angst vor API. Wenn du die Technik erstmal verstanden hast, ist der Umgang damit ganz leicht  |
|
|
| |
|
|