Seite 1 von 1

Mhh Code geht nicht mehr

Verfasst: 13.12.2004 17:49
von CNESM
Hi,

folgender Code stürzt bei mir nur im Exe-Zustand ab. Warum?

Sollte vielleicht generell daran was geändert werden?

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=2769
; Author: Ypser
; Date: 08. November 2003


;        GeTtHeCoLoR v1.0 
;        (ColorPicker) 
Enumeration 
  #Gadget_0 
  #Gadget_1 
  #Gadget_2 
  #Gadget_3 
  #RGB_Anzeige 
  #Hex_Anzeige 
  #Dez_Anzeige 
  #RGB_Check 
  #Hex_Check 
  #Dez_Check 
  #Show1 
  #Show2 
  #Info 
EndEnumeration 

#Event_Merken = 20 

Dim hw.s (5) 
Dim ActPixelColor (10, 8) 

InitKeyboard() 

If OpenWindow (0, 0, 0, 155, 110,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered , "GtC v1.0") 
  SetWindowPos_(WindowID(), #HWND_TOPMOST, 0, 0, 0, 0, #SWP_NOMOVE | #SWP_NOSIZE) 

  If CreateGadgetList(WindowID()) 
    TextGadget (#Gadget_0, 5, 8, 25, 15, "RGB:") 
    TextGadget (#Gadget_1, 5, 30, 25, 15, "Hex:") 
    TextGadget (#Gadget_2, 5, 53, 25, 15, "Dez:") 
    TextGadget (#Gadget_3, 5, 85, 32, 15, "Farbe:") 

    StringGadget (#RGB_Anzeige, 40, 5, 80, 18, "0, 0, 0", 0) 
    StringGadget (#Hex_Anzeige, 75, 28, 45, 18, "000000", 0) 
    StringGadget (#Dez_Anzeige, 40, 51, 80, 18, "0", 0) 
    OptionGadget (#RGB_Check, 135, 7, 20, 18, "") 
    OptionGadget (#Hex_Check, 135, 29, 20, 18, "") 
    OptionGadget (#Dez_Check, 135, 51, 20, 18, "") 
    ImageGadget (#Show1, 40, 75, 35, 29, 0, #PB_Image_Border) 
    ImageGadget (#Show2, 85, 75, 35, 29, 0, #PB_Image_Border) 
    ButtonGadget (#Info, 125, 85, 25, 15, "Info") 
    SetGadgetState (#Hex_Check, 1) 
  EndIf 
EndIf 
hdc = GetDC_(WindowID(35)) 
AddKeyboardShortcut (0, #PB_Shortcut_Space, #Event_Merken) 

ZU.s = Chr(13) + Chr(10) 
InfoText.s = "GeTtHeCoLoR v1.0" + ZU + "_______________________________________" + ZU + ZU 

InfoText + "Bedienung: Einfach den MouseCursor bewegen." + ZU 
InfoText + "Im linken Bild erscheint ein Auschnitt von dem," + ZU 
InfoText + "was unterm Cursor ist, im rechten die Farbe" + ZU 
InfoText + "GENAU unter dem Cursor." + ZU + ZU 
InfoText + "Oben steht der Farbwert in RGB, Hexadezimal" + ZU + "und Dezimal." + ZU 
InfoText + "Wenn man [Space] drückt, wird der Wert, hinter" + ZU 
InfoText + "dem das Häkchen gesetzt ist, in die Zwischen-" + ZU 
InfoText + "ablage gespeichert." + ZU + ZU 
InfoText + "(c) Ypser (F.H.), Nov. '03" 
; 

While WindowEvent(): Wend 
CreateImage (0, 33, 27) 
CreateImage (1, 33, 27) 

ActHex.s = "" 

Repeat 
  ActMouseX = (WindowMouseX() + WindowX ()) 
  ActMouseY = (WindowMouseY() + WindowY ()) 
  

  Select WindowEvent() 
    
    Case #PB_Event_CloseWindow 
      
      Quit = 1 
    
    Case #PB_Event_Gadget 
      
      Select EventGadgetID() 
        Case #Info 
          ;MessageRequester("GeTtHeCoLoR Info", InfoText, 0) 
      EndSelect 
    
    Case #PB_Event_Menu 
      
      If EventMenuID() = #Event_Merken 
        
        If GetGadgetState(#RGB_Check) = 1 
          SetClipboardText (GetGadgetText (#RGB_Anzeige)) 
        EndIf 
        
        If GetGadgetState(#Hex_Check) = 1 
          SetClipboardText (GetGadgetText (#Hex_Anzeige)) 
        EndIf 
        
        If GetGadgetState(#Dez_Check) = 1 
          SetClipboardText (GetGadgetText (#Dez_Anzeige)) 
        EndIf 
      
      EndIf 
  
  EndSelect 


  
  Delay(1) 
  
If (OldMouseX <> ActMouseX) Or (OldMouseY <> ActMouseY) 
  For Y = 0 To 8 
    For X = 0 To 10 
      ActPixelColor (X, Y) = GetPixel_(hdc, ActMouseX - 5 + X, ActMouseY - 4 + Y) 
    Next 
  Next 
  ActRed = Red (ActPixelColor (5, 4)) 
  ActGreen = Green (ActPixelColor (5, 4)) 
  ActBlue = Blue (ActPixelColor (5, 4)) 
  
  UseImage(0) 
  StartDrawing (ImageOutput()) 
    For Y = 0 To 8 
      For X = 0 To 10 
        Box (X * 3, Y * 3, 3, 3, ActPixelColor(X, Y)) 
      Next 
    Next 
  StopDrawing() 
  



  SetGadgetState (#Show1, UseImage(0)) 
  
  If OldColor <> ActPixelColor (5, 4) 
    Gosub HexColor 
    UseImage(1) 
    StartDrawing (ImageOutput()) 
    Box (0, 0, 33, 27, ActPixelColor(5, 4)) 
    StopDrawing() 
    
    SetGadgetState (#Show2, UseImage(1)) 

    SetGadgetText (#RGB_Anzeige, Str(ActRed) + ", " + Str(ActGreen) + ", " +Str(ActBlue)) 
    SetGadgetText (#Hex_Anzeige, ActHex) 
    SetGadgetText (#Dez_Anzeige, Str(ActPixelColor (5, 4))) 
  OldColor = ActPixelColor(5, 4) 
  EndIf 
  OldMouseX = ActMouseX 
  OldMouseY = ActMouseY 
EndIf 
;While WindowEvent(): Wend 
Until Quit 
ReleaseDC_(WindowID(35), hdc) 
End 



HexColor: 

  R1 = Int (ActRed / 16) 
  R2 = Int (ActRed - ( R1 * 16)) 
  hw (0) = Str (R1)  
  hw (1) = Str (R2) 
  
  G1 = Int (ActGreen / 16) 
  G2 = Int (ActGreen - ( G1 * 16)) 
  hw (2) = Str (G1)  
  hw (3) = Str (G2) 
  
  B1 = Int (ActBlue / 16) 
  B2 = Int (ActBlue - ( B1 * 16)) 
  hw (4) = Str (B1)  
  hw (5) = Str (B2) 
  

  ActHex = "" 

  For I = 0 To 5 
    Select hw (I) 
      Case "10" 
        hw (I) = "A" 
      Case "11" 
        hw (I) = "B" 
      Case "12" 
        hw (I) = "C" 
      Case "13" 
        hw (I) = "D" 
      Case "14" 
        hw (I) = "E" 
      Case "15" 
        hw (I) = "F" 
    EndSelect 
    ActHex + hw (I) 
  Next 
Return

Verfasst: 13.12.2004 18:04
von Laurin
Bei mir funktioniert der Code noch nicht mal so:

> Error in line 52: Window noct initialised (oder so ähnlich)
Das wäre diese Zeile:
> hdc = GetDC_(WindowID(35))

:?


Greetz Laurin

Re: Mhh Code geht nicht mehr

Verfasst: 14.12.2004 00:01
von Kristel
Mach mal hier

Code: Alles auswählen

hdc = GetDC_(WindowID(35))
und hier

Code: Alles auswählen

ReleaseDC_(WindowID(35), hdc)
35 zu 0. Dann lässt sich wenigstens das Programm starten,
obwohl es noch immer nicht richtig läuft. :mrgreen:
Meld mich, falls ich ne Lösung find.

Verfasst: 14.12.2004 07:03
von ChaOsKid
zeile 52:

Code: Alles auswählen

hdc = GetDC_(0)
zeile 76:

Code: Alles auswählen

ActMouseX = (DesktopMouseX() + WindowX ())
ActMouseY = (DesktopMouseY() + WindowY ())
zeile 160:

Code: Alles auswählen

ReleaseDC_(0, hdc)
mfG
Tobi

Verfasst: 14.12.2004 14:10
von CNESM
Hi,

danke Jungs !

Finds nur merkwürdig, warum der Code bei mir unter WinME läuft, aber als Exe einen Ausnahmefehler erzeugt. Unter XP läuft er überhaupt nicht. Langsam denke ich echt, das ME eine eigene Kultur entwickelt :?

Vielleicht wirds mal Zeit für einen Umstieg :roll:

Verfasst: 26.12.2004 19:04
von CNESM
Hi,

hab den Code mir gestern man angeschaut und ein kleines Frage dazu.

Ich möchte gern, das man mit dem "Abtaster" des gesamten aktuellen Bildschirmbereich abtasten kann, also Desktop, im vordergrund stehende Programme usw. Derweil ist das beispiel nur auf den das fenster 0, also das Hauptfenster, gerichtet. Wenn ich ein anderes Fenster abtasten will geht das nicht :(

Wie mache ich das?

Will nicht noch extra ein Fenster aufrmachen müssen und dann den Bildschirm als Bildkopie dort einfügen. Das gefällt mir nicht. Eine andere Methode?