Seite 2 von 2

Verfasst: 14.03.2009 16:48
von Andesdaf
ja unübersichtlich ist das schon. ossy sollte sich mal die Hilfe anschauen.

Verfasst: 14.03.2009 22:20
von hjbremer
Habe deinen Code aus einer unbekannten Sprache :mrgreen: mal nach PureBasic übersetzt.

Kontrollieren mußte halt selber, besonders die Sache mit dem Rechnen.
Vielleicht änderst du du FloatVariablen einmal nach Long bzw. Quad. Scheint irgendwie Probleme mit den Kommastellen zu geben bei 5 Ringen.

Code: Alles auswählen

Declare CreateBitmap(nr,farbe)
Declare CreateWiderstand()
Declare Mit4ringe() 
Declare Mit5ringe() 
Declare SchreibeDaten()
Declare StartWertesetzen()

; **************************************************** 
; *                 Widerstand-Farbcode              * 
; *                        von                       * 
; *                  Wolfgang Drescher               * 
; *             Version 1.0 vom 01.03.2009           * 
; *             übersetzt von HJBremer 2009          * 
; **************************************************** 

Structure Widerstandswerte
  r1.l
  r2.l
  r3.l
  r4.l
  r5.l
  start.l
  wertr1$
  wertr2$
  wertr3$
  wertr4$
  multi$
  kohm.f
  mohm.f
  wwert.f
  tol$
  windowbr.l
  windowhh.l
  butimgbr.l
  butimghh.l
  wdsimgbr.l
  wdsimghh.l 
  infimgbr.l
  infimghh.l
  backcolor.l
  
  vierringe.l
  fuenfringe.l 

  schwarz.l
  braun.l
  rot.l
  orange.l
  gelb.l
  gruen.l
  blau.l
  violet.l
  grau.l
  weiss.l
  silber.l
  gold.l
  hg.l
  farblos.l
EndStructure

Global wd.Widerstandswerte

LoadFont(0,"Arial",9)

#opgadgetvierringe = 1
#opgadgetfuenfringe = 2

#imggadgettxtinfo = 3
#imggadgetwiderstand = 4

StartWertesetzen()

CreateBitmap(10, wd\schwarz)
CreateBitmap(11, wd\braun)
CreateBitmap(12, wd\rot)
CreateBitmap(13, wd\orange)
CreateBitmap(14, wd\gelb)
CreateBitmap(15, wd\gruen)
CreateBitmap(16, wd\blau)
CreateBitmap(17, wd\violet)
CreateBitmap(18, wd\grau)
CreateBitmap(19, wd\weiss)
CreateBitmap(20, wd\silber)
CreateBitmap(21, wd\gold)
CreateBitmap(22, wd\farblos)

titel$ = "Widerstands-Farbcode by Wolfgang Drescher"
OpenWindow(0, 0, 0, wd\windowbr, wd\windowhh, titel$, #PB_Window_SystemMenu | #PB_Window_ScreenCentered  ) 
  CreateGadgetList(WindowID(0))
  SetWindowColor(0, wd\backcolor)
  
  TextGadget(#PB_Any, 95, 10, 220, 40, "", #SS_SUNKEN) 

  OptionGadget(#opgadgetvierringe,  130, 20, 60, 20, "4-Ringe") 
  OptionGadget(#opgadgetfuenfringe, 230, 20, 60, 20, "5-Ringe")
  ImageGadget(#imggadgetwiderstand,   0, 50,  0,  0, 0)     
  
  SetGadgetState(#opgadgetvierringe, 1)  ; erste Option als aktiv 

  ;Erster Ring
  sp = 50: ze = 140: nr = 10 
  
  For j = 100 To 109
   ButtonImageGadget(j,sp,ze,wd\butimgbr,wd\butimghh,ImageID(nr)) 
   ze + wd\butimghh: nr + 1 
  Next
  HideGadget(100,1)
  
  ;Zweiter Ring 
  sp = 110: ze = 140: nr = 10 
  
  For j = 200 To 209
   ButtonImageGadget(j,sp,ze,wd\butimgbr,wd\butimghh,ImageID(nr)) 
   ze + wd\butimghh: nr + 1 
  Next
  
  ;Driter Ring 
  sp = 170: ze = 140: nr = 10 
  
  For j = 300 To 311
   ButtonImageGadget(j,sp,ze,wd\butimgbr,wd\butimghh,ImageID(nr)) 
   ze + wd\butimghh: nr + 1 
  Next
  
  ;vierter Ring 
  sp = 230: ze = 140: nr = 10 
  
  For j = 400 To 411
   ButtonImageGadget(j,sp,ze,wd\butimgbr,wd\butimghh,ImageID(nr)) 
   ze + wd\butimghh: nr + 1 
  Next
     
  ;fünfter Ring 
  sp = 320: ze = 140: nr = 10 
  
  For j = 500 To 512
   ButtonImageGadget(j,sp,ze,wd\butimgbr,wd\butimghh,ImageID(nr)) 
   ze + wd\butimghh: nr + 1 
  Next
  HideGadget(500,1):HideGadget(503,1):HideGadget(504,1):HideGadget(509,1)
  
  ze + wd\butimghh    
  ImageGadget(#imggadgettxtinfo, 0, ze, 0, 0, 0) 
  
  ; Widerstand ausgeben
  SchreibeDaten() 
  Mit4Ringe()
  
Repeat 
 With wd.Widerstandswerte
  
    EventID = WaitWindowEvent() 
        
    If eventid = #PB_Event_Gadget
    
     GadgetNummer = EventGadget() 
      
     Select GadgetNummer 

       Case #opgadgetvierringe
         Mit4Ringe() 
         \vierringe = 0 
        
       Case #opgadgetfuenfringe
          Mit5ringe() 
          \vierringe = 1 
      
       Case 101: \r1 = \braun:  \wertr1$="1" 
       Case 102: \r1 = \rot:    \wertr1$="2" 
       Case 103: \r1 = \orange: \wertr1$="3" 
       Case 104: \r1 = \gelb:   \wertr1$="4" 
       Case 105: \r1 = \gruen:  \wertr1$="5" 
       Case 106: \r1 = \blau:   \wertr1$="6" 
       Case 107: \r1 = \violet: \wertr1$="7" 
       Case 108: \r1 = \grau:   \wertr1$="8" 
       Case 109: \r1 = \weiss:  \wertr1$="9" 
    
       Case 200: \r2 = \schwarz:\wertr2$="0" 
       Case 201: \r2 = \braun:  \wertr2$="1" 
       Case 202: \r2 = \rot:    \wertr2$="2" 
       Case 203: \r2 = \orange: \wertr2$="3" 
       Case 204: \r2 = \gelb:   \wertr2$="4" 
       Case 205: \r2 = \gruen:  \wertr2$="5" 
       Case 206: \r2 = \blau:   \wertr2$="6" 
       Case 207: \r2 = \violet: \wertr2$="7" 
       Case 208: \r2 = \grau:   \wertr2$="8" 
       Case 209: \r2 = \weiss:  \wertr2$="9" 
      
       Case 300: \r3 = \schwarz:\wertr3$="0": If \vierringe=0: \multi$="10": EndIf  
       Case 301: \r3 = \braun:  \wertr3$="1": If \vierringe=0: \multi$="000": EndIf   
       Case 302: \r3 = \rot:    \wertr3$="2": If \vierringe=0: \multi$="0000": EndIf   
       Case 303: \r3 = \orange: \wertr3$="3": If \vierringe=0: \multi$="00000": EndIf   
       Case 304: \r3 = \gelb:   \wertr3$="4": If \vierringe=0: \multi$="000000": EndIf   
       Case 305: \r3 = \gruen:  \wertr3$="5": If \vierringe=0: \multi$="0000000": EndIf   
       Case 306: \r3 = \blau:   \wertr3$="6": If \vierringe=0: \multi$="00000000": EndIf   
       Case 307: \r3 = \violet: \wertr3$="7": If \vierringe=0: \multi$="000000000": EndIf   
       Case 308: \r3 = \grau:   \wertr3$="8": If \vierringe=0: \multi$="0000000000": EndIf   
       Case 309: \r3 = \weiss:  \wertr3$="9": If \vierringe=0: \multi$="00000000000": EndIf   
       Case 310: \r3 = \silber: \wertr3$="":  If \vierringe=0: \multi$="": EndIf   
       Case 311: \r3 = \gold:   \wertr3$="":  If \vierringe=0: \multi$="0": EndIf   
    
       Case 400: \r4 = \schwarz:\multi$="00" 
       Case 401: \r4 = \braun:  \multi$="000" 
       Case 402: \r4 = \rot:    \multi$="0000" 
       Case 403: \r4 = \orange: \multi$="00000" 
       Case 404: \r4 = \gelb:   \multi$="000000" 
       Case 405: \r4 = \gruen:  \multi$="0000000" 
       Case 406: \r4 = \blau:   \multi$="00000000" 
       Case 407: \r4 = \violet: \multi$="000000000" 
       Case 408: \r4 = \grau:   \multi$="0000000000" 
       Case 409: \r4 = \weiss:  \multi$="00000000000" 
       Case 410: \r4 = \silber: \multi$=""
       Case 411: \r4 = \gold:   \multi$="0"
    
       Case 501: \r5 = \braun:  \tol$="+/- 1%" 
       Case 502: \r5 = \rot:    \tol$="+/- 2%" 
       
       Case 505: \r5 = \gruen:  \tol$="+/- 0,5%" 
       Case 506: \r5 = \blau:   \tol$="+/- 0,25%" 
       Case 507: \r5 = \violet: \tol$="+/- 0,1%" 
       Case 508: \r5 = \grau:   \tol$="+/- 0,05%" 
       
       Case 510: \r5 = \silber: \tol$="+/- 10%"
       Case 511: \r5 = \gold:   \tol$="+/- 5%"
       
       Case 512: \r5 = \hg:     \tol$="+/- 20%" 
     
     EndSelect
       
     SchreibeDaten() 
    
    EndIf
 
 EndWith     
Until EventID = #PB_Event_CloseWindow  ; Wenn das Schliessen Button gedrückt wird, Programm beenden.

End   ; Programm ende 

Procedure Mit4ringe() 

  HideGadget(400, 1) 
  HideGadget(401, 1) 
  HideGadget(402, 1) 
  HideGadget(403, 1)  
  HideGadget(404, 1) 
  HideGadget(405, 1) 
  HideGadget(406, 1) 
  HideGadget(407, 1)  
  HideGadget(408, 1) 
  HideGadget(409, 1) 
  HideGadget(410, 1) 
  HideGadget(411, 1) 
        
  HideGadget(308, 1) 
  HideGadget(309, 1) 
  HideGadget(310, 0) 
  HideGadget(311, 0) 

  wd\r4 = wd\hg     ; Hindergrundfarbe vom 4. Ring 

EndProcedure

Procedure Mit5ringe() 
  
  HideGadget(310, 1) 
  HideGadget(311, 1) 
  
  HideGadget(308, 0) 
  HideGadget(309, 0) 
    
  HideGadget(400, 0) 
  HideGadget(401, 0) 
  HideGadget(402, 0) 
  HideGadget(403, 0)  
  HideGadget(404, 0) 
  HideGadget(405, 0) 
  HideGadget(406, 0) 
  HideGadget(407, 0)  
  HideGadget(408, 1) 
  HideGadget(409, 1) 
  HideGadget(410, 0) 
  HideGadget(411, 0) 

EndProcedure 

Procedure SchreibeDaten()

CreateWiderstand()

With wd.Widerstandswerte

CreateImage(1, \infimgbr, \infimghh)
StartDrawing(ImageOutput(1)) 

  If \vierringe = 0 Or \start = 1 
  
    wwert$ = \wertr1$ + \wertr2$ + \multi$ 
    
    \start = 0 
    \wwert = ValD(wwert$) 
    \wwert = \wwert / 100 
    \kohm  = \wwert / 1000 
    \mohm  = \kohm / 1000 
    ohm$   = StrF(\wwert,1) 
    kohm$  = StrF(\kohm, 3) 
    mohm$  = StrF(\mohm, 6) 
  
  EndIf 
      
  If \vierringe = 1 
  
    wwert$=\wertr1$+\wertr2$+\wertr3$+\wertr4$+\multi$ 
    
    \start = 0 
    \wwert = ValD(wwert$) 
    \wwert = \wwert / 100 
    \kohm  = \wwert / 1000 
    \mohm  = \kohm / 1000 
    ohm$   = StrF(\wwert,1) 
    kohm$  = StrF(\kohm, 3) 
    mohm$  = StrF(\mohm, 6) 
    
  EndIf 
  
  Box(0, 0, \infimgbr, \infimghh, \backcolor)
  FrontColor(#Blue)
  DrawingMode(#PB_2DDrawing_Transparent) 

  DrawText( 30,5,"Ohm") 
  DrawText(130,5,"Kiloohm") 
  DrawText(220,5,"Megaohm") 
  DrawText(320,5,"Toleranz") 
      
  DrawingFont(FontID(0))
  FrontColor(#Black)
  DrawText( 30,20, ohm$) 
  DrawText(130,20, kohm$) 
  DrawText(220,20, mohm$) 
  DrawText(320,20, \tol$) 
  
StopDrawing()  

SetGadgetState(#imggadgettxtinfo,ImageID(1))

EndWith
EndProcedure

Procedure StartWertesetzen()
; startausgabe für 100 Ohm ausgeben 

With wd.Widerstandswerte

  \schwarz = RGB(10,10,10) 
  \braun = RGB(128,60,0) 
  \rot = RGB(255,0,0) 
  \orange = RGB(255,130,0) 
  \gelb = RGB(255,255,0) 
  \gruen = RGB(0,128,0) 
  \blau = RGB(0,0,255) 
  \violet = RGB(160,18,95) 
  \grau = RGB(128,128,128) 
  \weiss = RGB(255,255,255) 
  \silber = RGB(192,192,192) 
  \gold = RGB(128,128,0) 
  \hg = RGB(50,220,200)  ; Widerstands Grundfarbe 
  \farblos = 0           ; ????

  \r1 = \braun    
  \r2 = \schwarz 
  \r3 = \braun 
  \r4 = \hg 
  \r5 = \gold 
  \start = 1 
  \wertr1$="1" 
  \wertr2$="0" 
  \multi$="000" 
  \kohm=0 
  \mohm=0 
  \tol$="+/- 5%"
  \windowbr = 400 
  \windowhh = 400 
  \butimgbr = 50
  \butimghh = 15
  \wdsimgbr = 400
  \wdsimghh = 80
  \infimgbr = 400
  \infimghh = 50
  \backcolor= $F5D68E

  \vierringe = 1
  \fuenfringe = 0 

EndWith
EndProcedure

Procedure CreateBitmap(nr,farbe)
  CreateImage(nr, wd\butimgbr, wd\butimghh)
  StartDrawing(ImageOutput(nr))
    Box(0,0,wd\butimgbr, wd\butimghh, farbe)
  StopDrawing()
EndProcedure

Procedure CreateWiderstand()

With wd.Widerstandswerte
       
  CreateImage(0, \wdsimgbr, \wdsimghh)     
  StartDrawing(ImageOutput(0)) 
      
      Box(0,0,\wdsimgbr, \wdsimghh, \backcolor)
      
      ;Widerstand malen
      Box( 29,34,347, 4, #White)
      Box( 29,36,347, 2, #Gray) 
      Box( 99, 9,217,62, $E6E6EE) 
      Box( 99,12,214,59, #Gray) 
      Box(102,12,212,57, RGB( 50,220,200)) 

      ;Ringe malen
      x=120       
      Box(x+  0,12,15,57, \r1)  ; 1. Ring 
      Box(x+ 30,12,15,57, \r2)  ; 2. Ring 
      Box(x+ 60,12,15,57, \r3)  ; 3. Ring 
      Box(x+ 90,12,15,57, \r4)  ; 4. Ring 
      Box(x+160,12,15,57, \r5)  ; 5. Ring 
      
  StopDrawing() 
  
  SetGadgetState(#imggadgetwiderstand,ImageID(0))   

EndWith
EndProcedure
PS: Und etwas mehr die Hilfe lesen und Beispielcodes ansehen und ausprobieren.

Und vor allem den Code besser Strukturieren, aber ansonsten ist es schon eine sehr gute Idee dieses Proggi :allright:

Verfasst: 15.03.2009 17:03
von Andesdaf
jetzt kommt was sinnvolles raus!

Verfasst: 16.03.2009 21:35
von ossy
Hallo HJBremer,

vielen Dank für deine Bemühungen.

Deine Übersetzung ist für mich natürlich ein enormer Lehrneffekt.

Doch würde mich interesieren, wo ich einen Hinweis finde, wie man
in Purebasic einen Code richtig Strukturiert. Bis dahin werde ich anhand deiner Übersetzung meine Programme aufbauen.

:allright:

Nochmals vielen Dank

Gruß Wolfgang

Verfasst: 17.03.2009 17:17
von Andesdaf