Danke für die schnelle Antwort.
Du liegst richtig in der Annahme, das #cmbStadt die ID ist,
Das macht meine GetPressedkey()
Code: Alles auswählen
Procedure GetPressedKey()
For Cnt = 0 To 256
If GetAsyncKeyState_(Cnt) <> 0
ProcedureReturn = Cnt
Break
EndIf
Next
EndProcedure
So sieht gekürzt die Hauptschleife aus:
Code: Alles auswählen
.
.
.
; Initalisierung und laden von Grafikdaten, Kartendaten, Ortsdaten, Initialisieren der Array usw
.
.
.
SetGadgetState(#gdImage, UseImage(#mainImage))
Repeat
Event = WaitWindowEvent()
Select Event
;- Event Windows
Case #PB_Event_SizeWindow
; Neuordnung der Gadgets und Anpassung der Bildgrösse
.
.
.
;- Event Menu
Case #PB_EventMenu
; Behandeln der Menuevents
.
.
.
;- Event Tastatur
Case #WM_KEYDOWN
Debug "Taste drückt: "+Str(getpressedkey())
;Entsprechend Forumpost geändert - will trotzdem noch nicht so
taste = getpressedkey()
ActiveID = GetFocus_()
If ActiveID <> GadgetID(#cmbStadt)
Select taste
Case 37
startX - offset
redraw = 1
Case 38
startY - offset
redraw = 1
Case 39
startX + offset
redraw = 1
Case 40
startY + offset
redraw = 1
EndSelect
EndIf
Case #WM_KEYUP
Debug "Taste los: "+Str(getpressedkey())
;- Event Gadgets
Case #PB_EventGadget
GadgetID = EventGadgetID()
Select GadgetID
Case #cmbStadt
Debug "GadgetID: #cmbStadt"
AutocompleteComboBox(#cmbStadt)
;Autocomplete aus dem PureNet Codearchiv
; Ortsdaten liegen in drei Arrays (name, x und y)
gefunden = GetGadgetState(#cmbStadt)
If gefunden > -1
startX=stadt_x(gefunden)-tileX/2
startY=stadt_y(gefunden)-tileY/2
redraw = 1
repaint = 1
;setzen der neuen startkoordinaten der linken oberen ecke, sowie setzen des flags für neuen bildaufbau (tileX und tileY sind breite und höhe des bildschirmes in tiles)
EndIf
Case #txtX
Debug "GadgetID: #txtX"
Case #txtY
Debug "GadgetID: #txtY"
Case #btnOK
Debug "GadgetID: #btnOK"
Case #scrlX
Debug "GadgetID: #scrlX"
Case #scrlY
Debug "GadgetID: #scrlY"
EndSelect
EndSelect
;- Zeichnen
tileX=scrX/pixelX
tileY=scrY/pixelY
;prüfen ob durch bewegung nicht ausserhalb der Kartendimensionen
If startX=<minX
startX=minX
EndIf
If startX>=maxX-tileX
startX=maxX-tileX
EndIf
If startY<=minY
startY=minY
EndIf
If startY>=maxY-tileY
startY=maxY-tileY
EndIf
If old_startX<>startX Or old_startY<>startY Or redraw = 1
redraw = 0
old_startX=startX
old_startY=startY
;bild = UseImage(#mainImage)
Debug "Bild aufbauen..."
outputDC= StartDrawing(ImageOutput())
DrawingMode(1)
Box(0, 0, image_wd, image_hg,RGB(0,0,0))
For x=0 To tileX
For y=0 To tileY
If x+startX <= maxX And y+startY <=maxY And x+startX >= minX And y+startY >= minY
fg=bild_fg(x+startX-minX,y+startY-minY)
bg=bild_bg(x+startX-minX,y+startY-minY)
ma=bild_mark(fg)
If bg>0
DrawImage(UseImage(pic_bilder(bg)), x*pixelX+24*koord,y*pixelY+24*koord)
EndIf
If fg>0 And bg > 0
;Transparentes Zeichnen
id=UseImage(pic_bilder(fg))
imglist=ImageList_Create_(ImageWidth(),ImageHeight(),#ILC_COLORDDB|#ILC_MASK,1,0)
ImageList_AddMasked_(imglist,id,RGB(0,0,0))
ImageList_Draw_(imglist,0,outputDC,x*pixelX+24*koord,y*pixelY+24*koord,#ILD_TRANSPARENT)
ImageList_Destroy_(imglist)
EndIf
If fg>0 And bg = 0
DrawImage(UseImage(pic_bilder(fg)), x*pixelX+24*koord,y*pixelY+24*koord)
EndIf
EndIf
If farbe=1
; Bestimmte Tiles farblich Kennzeichnen
DrawingMode(4)
Select ma
Case 1
Box(x*pixelX+24*koord+1,y*pixelY+24*koord+1, pixelX-1, pixelY-1,RGB(255,0,0))
Case 2
If zoomstufe>1
Box(x*pixelX+24*koord+1,y*pixelY+24*koord+1, pixelX-1, pixelY-1,RGB(255,255,0) )
EndIf
Case 3
If zoomstufe>1
Box(x*pixelX+24*koord+1,y*pixelY+24*koord+1, pixelX-1, pixelY-1,RGB(0,255,0) )
EndIf
EndSelect
DrawingMode(1)
EndIf
Next
Next
If Raster = 1
; Kartenraster bei Bedarf zeichnen
If zoomstufe>2
For x=0 To tileX
LineXY(x*PixelX+24*koord,0,x*pixelX+24*koord,scrY+24,RGB(0,0,0))
Next
For Y=0 To tileY
LineXY(0,y*pixelY+24*koord,scrX+24, y*pixelY+24*koord,RGB(0,0,0))
Next
EndIf
EndIf
StopDrawing()
SetGadgetState(#gdImage, UseImage(#mainImage))
EndIf
Until Event = #PB_EventCloseWindow
Ich hoffe die Angaben sind ausreichend
Danke
Amon