Warum wird kein Button angezeigt?

Anfängerfragen zum Programmieren mit PureBasic.
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Warum wird kein Button angezeigt?

Beitrag von Alantope »

Wer kann mir helfen? Beim Öffnen eines Feldes mit einem Progressbar-Gadget und einem Button-Gadget wird der Button Gadget nicht angezeigt. Außerdem wird die Hintergrundfarbe eines Text-Gadgets nicht korrekt wiedergegeben. Das Programm lautet:

If OpenWindow(700, 666, 362, 405, 160,"Test",#PB_Window_SystemMenu|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

Hintergrundfarbe=$00000AAFFF; orange
SetWindowColor(700,Hintergrundfarbe)
FontID1 = LoadFont(1, "Arial", 12)
TextGadget(701, 40, 20, 240, 20, "Bitte warten")
SetGadgetFont(701, FontID1)
SetGadgetColor(701,#PB_Gadget_BackColor,Hintergrundfarbe)
ProgressBarGadget(710, 40, 60, 330, 30, 0, 100,#PB_ProgressBar_Smooth)
SetGadgetColor(710,#PB_Gadget_BackColor,Hintergrundfarbe)
ButtonGadget(705, 260, 110, 110, 30,"Abbrechen")
SetGadgetColor(705,#PB_Gadget_BackColor,Hintergrundfarbe)
SetGadgetFont(705, FontID1)

I=0
Repeat
I=I+1
SetGadgetState(710,I/100000)
Until I=10000000

EndIf
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 »

Hallo Alantope

Deinen Code sollteste in code-tags packen: [ code ]SetGadgetText ... [ /code ]
, ohne spaces.

Dein Code enthält keinerlei EventLoop, somit wird dort auch keinerlei
Anzeige aktualisiert, siehe WaitWindowEvent() und Beispiele

Gruß
Thomas
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
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

Hallo Thomas,

leider kann ich Dir nicht ganz folgen. Was sind Code Tags und was bewirken sie? Ich habe schon mehrere auch anspruchsvollere Programme geschrieben aber bin bisher -so glaube ich zumindest - bisher immer ohne ausgekommen.

Weiterhin verstehe ich nicht, warum die Anzeige refresht werden muss. Ich bilde doch den Button und die Progress Bar unabhängig voneinander ab und beide überschreiben sich nicht.

Alantope
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Alantope hat geschrieben:leider kann ich Dir nicht ganz folgen. Was sind Code Tags und was bewirken sie? Ich habe schon mehrere auch anspruchsvollere Programme geschrieben aber bin bisher -so glaube ich zumindest - bisher immer ohne ausgekommen.
:lol: Code-Tags sind zum formatieren im Forum, ungefähr so:

Code: Alles auswählen

If OpenWindow(700, 666, 362, 405, 160, "Test", #PB_Window_SystemMenu | #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Hintergrundfarbe = $00000AAFFF; orange
  SetWindowColor(700, Hintergrundfarbe)
  FontID1 = LoadFont(1, "Arial", 12)
  TextGadget(701, 40, 20, 240, 20, "Bitte warten")
  SetGadgetFont(701, FontID1)
  SetGadgetColor(701, #PB_Gadget_BackColor, Hintergrundfarbe)
  ProgressBarGadget(710, 40, 60, 330, 30, 0, 100, #PB_ProgressBar_Smooth)
  SetGadgetColor(710, #PB_Gadget_BackColor, Hintergrundfarbe)
  ButtonGadget(705, 260, 110, 110, 30, "Abbrechen")
  ButtonGadget(706, 40, 110, 110, 30, "Test")
  SetGadgetColor(705, #PB_Gadget_BackColor, Hintergrundfarbe)
  SetGadgetFont(705, FontID1)
  
  Repeat
    Event = WaitWindowEvent()
    Select Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 706
            I = 0
            Repeat
              I = I + 1
              SetGadgetState(710, I/100000)
            Until I = 10000000
        EndSelect
    EndSelect
  Until Event = #PB_Event_CloseWindow
  
  
EndIf
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

O.K. Danke. Damit habe ich mich wirklich als Newbie hier im Forum geoutet. :cry:
Aber nun zum wirklichen Problem. Wer kann mir dabei helfen?

Alantope
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Siehe den Code den ich oben gepostet habe....
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
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 »

Der Code von cAlex ändert auch nicht viel, ausser das die Button da sind

Code: Alles auswählen

If OpenWindow(700, 666, 362, 405, 160,"Test",#PB_Window_SystemMenu|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)

  Hintergrundfarbe=$00000AAFFF; orange
  SetWindowColor(700,Hintergrundfarbe)
  FontID1 = LoadFont(1, "Arial", 12)
  TextGadget(701, 40, 20, 240, 20, "Bitte warten")
  SetGadgetFont(701, FontID1)
  SetGadgetColor(701,#PB_Gadget_BackColor,Hintergrundfarbe)
  ProgressBarGadget(710, 40, 60, 330, 30, 0, 100,#PB_ProgressBar_Smooth)
  SetGadgetColor(710,#PB_Gadget_BackColor,Hintergrundfarbe)
  ButtonGadget(705, 260, 110, 110, 30,"Abbrechen")
  SetGadgetColor(705,#PB_Gadget_BackColor,Hintergrundfarbe)
  SetGadgetFont(705, FontID1)

  I=0
  Repeat
    Select WaitWindowEvent(30)
      Case #PB_Event_CloseWindow
        Break
      Case #PB_Event_Gadget
        If EventGadget() = 705
          I = 100
          MessageRequester("", "Abgebrochen")
        EndIf
      Case 0
        If I < 100
          I=I+1
          SetGadgetState(710,I)
        EndIf
    EndSelect
  ForEver

EndIf
PS: Keine willkürlichen Zahlen für Gadgets verwenden, durchnummerieren von 0 bis, am besten mit Konstanten
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
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

Hey, Super. Ich komme der Lösung schon näher.

Mein Problem ist, dass ich eine komplizierte Berechnung durchführen möchte, die unter Umständen mehrere Minuten dauern kann. Ich möchte dem User aber die Möglichkeit geben, dass er - wenn es zu lange dauert - den Prozess auch Abbrechen kann. Daher der Button. Daher nutzt mir das Programm von Thomas schon ein wenig mehr. Ich sehe aber nicht, wie sich der Fortschrittsbalken weiterbewegt.
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

PS: Keine willkürlichen Zahlen für Gadgets verwenden, durchnummerieren von 0 bis, am besten mit Konstanten
Sicherlich hast Du Recht. Ich habe aber diesen Programmteil aus einem großen Programm von mir entnommen, wo die Prozeduren durchnummeriert sind. Und dies ist eben die 7. Prozedur und dann weiß ich sofort, zu welcher Prozedur die Gadgets gehören.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Dafuer bieten sich Konstanten doch gerade zu an.
Antworten