Mhh Code geht nicht mehr

Für allgemeine Fragen zur Programmierung mit PureBasic.
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Mhh Code geht nicht mehr

Beitrag 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
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag 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
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Kristel
Beiträge: 72
Registriert: 30.08.2004 00:17

Re: Mhh Code geht nicht mehr

Beitrag 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.
Benutzeravatar
ChaOsKid
Beiträge: 66
Registriert: 29.08.2004 15:07
Wohnort: Oktoberfest

Beitrag 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
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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:
CNESM
Beiträge: 311
Registriert: 29.08.2004 15:16
Kontaktdaten:

Beitrag 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?
Antworten