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