fließkommazahl in zeitangabe umwandel?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Ja, dann bekommt es einen dickeren Rahmen :wink:
Ich sehe gerade, er hat ja nur einen Button, dann sollte er den Shortcut benutzen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

wieso? o_O
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Weil der Button unter Windows nur durch die Leertaste ausgelöst wird, wenn er den Fokus hat. Nur Dialoge (Requester) verhalten sich anders.

Und wieso ist da kein Löffel?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich verstehs immer noch nicht...

meinst du, wenn ich den button aus default setze, dann bekommt er nur nen dickeren rahmen, wird aber nicht durch return ausgelöst?

...das kenn ich aber anders...


-----

versuch nicht, den löffel zu verbiegen, das ist nämlich nicht möglich.
stell dir einfach die wahrheit vor, und du wirst sehen,
daß nicht der löffel sich verbiegt, sondern daß du selbst dich verbiegst.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Das kennst Du nur deshalb anders, weil Du in Fenstern mit vielen Button ja nie Return benutzen würdest. Machst Du autom. nur bei Dialogfenstern, mit nur 1-3 Button. Dialogfenster reagieren auch meist auf Escape, normale Fenster nicht.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Eigentlich hab ich ja 2 Buttons;
Wenn ich im Conzcalc-Programm bin sollte der Button ID 15 mit Return "betätigt" werden können und das selbe gilt für das Doseconv-Programm - Button ID 41!

Wie mach ich denn das jetzt am besten?

mfg. Zerosurf
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Mit AddKeyBoardShortcut, Return abfangen, erzeugt dann ein Menüereignis
Wenn dieses ereignis Eintritt, mit If GetFocus_() = GadgetID(15)) feststellen welcher Button den Focus hat und entsprechend reagieren.
Wenns nicht klappt, dann frag nochmal!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Sorry ts-soft, aber irgendwie versteh ich´s nicht!

Hast Du ein Codebeispiel woran ich mich orientieren kann?

Vielen Dank für Deine Hilfe!

mfg. Zerosurf
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

If OpenWindow(0, #CW_USEDEFAULT, #CW_USEDEFAULT, 90, 80, #PB_Window_SystemMenu, "Test")
  AddKeyboardShortcut(0, #PB_Shortcut_Return, 0)
  If CreateGadgetList(WindowID(0))
    ButtonGadget(1, 10, 10 , 60, 30, "Button1", #PB_Button_Default)
    ButtonGadget(2, 10, 40 , 60, 30, "Button2")
    ActivateGadget(1)
  EndIf
  Repeat
    EventID  = WaitWindowEvent()
    MenuID   = EventMenuID()
    GadgetID = EventGadgetID()
    Select EventID
      Case #PB_Event_Menu
        Select MenuID 
          Case 0 ;Return
            Select GetFocus_()
              Case GadgetID(1)
                Debug "Button1"
              Case GadgetID(2)
                Debug "Button2"
            EndSelect
        EndSelect
      Case #PB_Event_Gadget
        Select GadgetID
          Case 1
            Debug "Button1"
          Case 2
            Debug "Button2"
        EndSelect
    EndSelect
  Until EventID = #PB_Event_CloseWindow
EndIf
Ich hoffe das hilft :wink: Kannst ja mal mit TAB zwischen den Button hin und herspringen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Das Problem bei der Sache ist, daß ich 2 Buttons habe, wovon ich einen immer verstecke.

Hier ist noch einmal der Code:

Code: Alles auswählen

Procedure.s MakeTimeString(tdec.f)
  Protected time.l, dd.w, hh.w, ii.w, ss.w, hs.w, out.s
  time = Round(tdec * 360000, 1)
  hs = time % 100 : time / 100
  ss = time % 60  : time / 60
  ii = time % 60  : time / 60
  hh = time % 24  : time / 24
  dd = Int(time)
  out = RSet(Str(dd), 2, "0") + " Tage " 
  out + RSet(Str(hh), 2, "0") + " h "
  out + RSet(Str(ii), 2, "0") + " min "
  out + RSet(Str(ss), 2, "0") + " sec " 
  ProcedureReturn out
EndProcedure

 If OpenWindow(0, 216, 0, 400, 300,  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered , "Medcal")
    If CreateMenu(0, WindowID())
      MenuTitle("Programme")
      MenuItem(1, "Conzcalc")
      MenuItem(2, "Doseconv")
      MenuBar()
      MenuItem(3, "Ende")
      MenuTitle("Hilfe")
      MenuItem(4, "Conzcalc")
      MenuItem(5, "Doseconv")
      MenuBar()
      MenuItem(6, "Visit Website")
      MenuItem(7, "About")
    EndIf
    If CreateGadgetList(WindowID())
        Frame3DGadget(2, 10, 10, 380, 30, "", #PB_Frame3D_Single) 
        Frame3DGadget(0, -5, -5, 410, 310, "")
        Frame3DGadget(1, 10, 50, 380, 220, "")
        ProgressBarGadget(3, 20, 157, 360, 10, 1, 5000, #PB_ProgressBar_Smooth)
        TextGadget(12, 170, 18, 60, 20, "Conzcalc", #PB_Text_Center)
        TextGadget(20, 60, 70, 140, 20, "Gewünschte Menge:")
        TextGadget(4, 60, 100, 140, 20, "Ausgangskonzentration:")
        TextGadget(5, 60, 130, 140, 20, "Gewünschte Konzentration:")
        StringGadget(6, 240, 67, 70, 20, "", #PB_Text_Right)
        StringGadget(7, 240, 97, 70, 20, "", #PB_Text_Right)
        StringGadget(8, 240, 127, 70, 20, "", #PB_Text_Right)
        TextGadget(9, 315, 100, 30, 20, "in %")
        TextGadget(10, 315, 130, 30, 20, "in %")
        TextGadget(11, 315, 70, 30, 20, "in ml")
        TextGadget(13, 60, 180, 170, 20, "Menge der Ausgangskonzentration:")
        TextGadget(14, 60, 210, 160, 20, "Menge des Lösungsmittels:")
        ButtonGadget(15, 160, 240, 80, 20, "Berechnen", #PB_Button_Default)
        TextGadget(16, 315, 180, 20, 20, "ml")
        TextGadget(17, 315, 210, 20, 20, "ml")
        TextGadget(18, 240, 177, 70, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(19, 240, 207, 70, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(21, 170, 18, 60, 20, "Doseconv", #PB_Text_Center)
        TextGadget(22, 60, 70, 140, 20, "Körpergewicht:")
        TextGadget(23, 60, 100, 140, 20, "Gewünschte Dosierung:")
        TextGadget(24, 60, 130, 140, 20, "Medikamentenkonzentration:")
        StringGadget(25, 240, 67, 70, 20, "", #PB_Text_Right)
        StringGadget(26, 240, 97, 70, 20, "", #PB_Text_Right)
        StringGadget(27, 240, 127, 40, 20, "", #PB_Text_Right)
        StringGadget(28, 310, 127, 40, 20, "", #PB_Text_Right)
        TextGadget(29, 315, 70, 30, 20, "kg")
        TextGadget(30, 315, 100, 65, 20, "µg/kgKG/min")
        TextGadget(31, 285, 130, 25, 20, "mg/")
        TextGadget(32, 355, 130, 20, 20, "ml")
        TextGadget(33, 60, 180, 170, 20, "Flußrate:")
        TextGadget(34, 60, 210, 70, 20, "Infusionsdauer")
        TextGadget(45, 132, 210, 93, 20, "")
        TextGadget(46, 235, 210, 15, 20, "")
        TextGadget(35, 235, 180, 25, 20, "ml/h")
        TextGadget(36, 335, 180, 25, 20, "mg/h")
        TextGadget(37, 355, 210, 25, 20, "")
        TextGadget(38, 170, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(39, 270, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(40, 235, 210, 135, 20, "")
        ButtonGadget(41, 160, 240, 80, 20, "Berechnen", #PB_Button_Default)
        TextGadget(42, 130, 18, 140, 20, "Bitte Programm auswählen:", #PB_Text_Center)
        ButtonGadget(43, 70, 140, 100, 30, "Conzcalc")
        ButtonGadget(44, 230, 140, 100, 30, "Doseconv")
      EndIf
      
      For a=3 To 41
        HideGadget(a,1)
      Next
      HideGadget(45,1)
      HideGadget(46,1) 
       
      Repeat 
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
          Quit = 1 
        ElseIf EventID = #PB_EventMenu
          If EventMenuID()=6
            RunProgram("http://www.marcotorskyj.com")
          EndIf
          If EventMenuID()=4
            MessageRequester("Über Conzcalc","Conzcalc - Conzentration-Calculator" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von Lösungen mit höheren Konzentrationen" + Chr(10) + "zu Lösungen mit niedrigeren Konzentrationen." + Chr(10) + Chr(10) + "Beispiel:" + Chr(10) + "Ein 2 prozentiges Medikament soll in eine 1,5 prozentige Lösung umgewandelt werden." + Chr(10) + "Die gewünschte Menge der 1,5 prozentigen Lösung soll 50ml betragen." + Chr(10) + Chr(10) + "Wieviel ml benötigt man von der 2 prozentigen Lösung und wieviel Lösungsmittel" + Chr(10) + "wird benötigt um eine 1,5 prozentige - 50ml Lösung herzustellen?", #MB_ICONASTERISK) 
          EndIf
          If EventMenuID()=5
            MessageRequester("Über Doseconv","Doseconv - Dose-Converter" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von µg/kgKG/min in ml/h bzw. in mg/h." +Chr(10) + "Es wird auch die Dauer der Infusion ausgerechnet.", #MB_ICONASTERISK)
          EndIf
          If EventMenuID()=7
            MessageRequester("Thanks...", "for using Medcal v1.00" + Chr(10) + Chr(10) + "Written by Marco TORSKYJ" + Chr(10) + Chr(10) + "Supported by Dr. Andreas MAYER" + Chr(10) + "and Dr. Karl-Heinz STADLBAUER" + Chr(10) + Chr(10) + "Copyright © 2005 Marco TORSKYJ" + Chr(10) + "All rights reserved.", #MB_ICONASTERISK)
          EndIf
          
          If EventMenuID()=3
            Quit = 1
          EndIf 
          If  EventMenuID()=1
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            For a=3 To 20
              HideGadget(a,0)
            Next
            For a=21 To 46
              HideGadget(a,1)
            Next
            ActivateGadget(15) 
          EndIf
          If  EventMenuID()=2
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"") 
            HideGadget(3,0)
            For a=4 To 20
              HideGadget(a,1)
            Next
            For a=21 To 46
              HideGadget(a,0)
            Next
            For a=42 To 44
              HideGadget(a,1)
            Next
            ActivateGadget(41) 
          EndIf
          
        EndIf
        
        If EventID = #PB_Event_Gadget
          If EventGadgetID()=43
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            For a=3 To 20
              HideGadget(a,0)
            Next
            For a=21 To 46
              HideGadget(a,1)
            Next
            ActivateGadget(15) 
          EndIf
          If EventGadgetID()=44
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"") 
            HideGadget(3,0)
            For a=4 To 20
              HideGadget(a,1)
            Next
            For a=21 To 46
              HideGadget(a,0)
            Next
            For a=42 To 44
              HideGadget(a,1)
            Next
            ActivateGadget(41) 
          EndIf
          
          If EventGadgetID()=15
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            
            gm.f = ValF(ReplaceString(GetGadgetText(6), ",", ".", 2))
            ak.f = ValF(ReplaceString(GetGadgetText(7), ",", ".", 2))
            gk.f = ValF(ReplaceString(GetGadgetText(8), ",", ".", 2))
            
            If gm = 0
              MessageRequester("Achtung!","Keine Angabe der gewünschten Menge!", #MB_ICONEXCLAMATION)
            ElseIf ak = 0
              MessageRequester("Achtung!","Keine Angabe der Ausgangskonzentration!", #MB_ICONEXCLAMATION)
            ElseIf ak >= 100
              MessageRequester("Achtung!","Ausgangskonzentration muß kleiner als 100 sein!", #MB_ICONEXCLAMATION)
            ElseIf gk = 0
              MessageRequester("Achtung!","Keine Angabe der gewünschten Konzentration!", #MB_ICONEXCLAMATION)
            ElseIf gk > ak
              MessageRequester("Achtung!","Gewünschte Konzentration muß kleiner sein!", #MB_ICONEXCLAMATION)
            Else
              
              mdak.f = (gm * gk) / ak
              mdlm.f = gm - mdak
              
              result1$ = ReplaceString(StrF(mdak,2), ".", ",", 2) 
              result2$ = ReplaceString(StrF(mdlm,2), ".", ",", 2) 
              
              For a=1 To 5000
                SetGadgetState(3,a)
              Next 
              
              SetGadgetText(18,result1$)
              SetGadgetText(19,result2$)
            EndIf
          EndIf
          If EventGadgetID()=41
            
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            
              kg.f = ValF(ReplaceString(GetGadgetText(25), ",", ".", 2))
              gd.f = ValF(ReplaceString(GetGadgetText(26), ",", ".", 2))
              mkmg.f = ValF(ReplaceString(GetGadgetText(27), ",", ".", 2))
              mkml.f = ValF(ReplaceString(GetGadgetText(28), ",", ".", 2))
              
              If kg = 0
                MessageRequester("Achtung!","Keine Angabe des Körpergewichtes!", #MB_ICONEXCLAMATION)
              ElseIf gd = 0
                MessageRequester("Achtung!","Keine Angabe der gewünschten Dosierung!", #MB_ICONEXCLAMATION)
              ElseIf mkmg = 0
                MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (mg)!", #MB_ICONEXCLAMATION)
              ElseIf mkml = 0
                MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (ml)!", #MB_ICONEXCLAMATION)
              Else
                
                frmlh.f = (kg * gd * 0.06) / (mkmg / mkml)
                frmgh.f = (mkmg / mkml) * frmlh
                rz.f = mkml / frmlh
                m.f = mkml
                
                result3$ = ReplaceString(StrF(frmlh,2), ".", ",", 2) 
                result4$ = ReplaceString(StrF(frmgh,2), ".", ",", 2) 
;                result5$ = ReplaceString(StrF(rz,2), ".", ",", 2) 
;                result5$ = FormatDate("%dd Tage %hh h %ii min %ss sec", Round(rz * 3600, 1))
                result6$ = ReplaceString(StrF(m,2), ".", ",", 2) 
                
                For a=1 To 5000
                  SetGadgetState(3,a)
                Next 
                
                SetGadgetText(38,result3$)
                SetGadgetText(39,result4$)
                SetGadgetText(40, MakeTimeString(rz))
                SetGadgetText(45,"mit " + result6$ + " ml:")
              EndIf
            EndIf
        EndIf
      Until Quit=1
    EndIf
    End
Wo fang ich da am besten an?

mfg. Zerosurf
Antworten