Warum wird kein Button angezeigt?

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 »

Dann nimmste Konstanten als #Proc7_Button_Okay oder ähnlich.
Für alle Lücken in Deiner Nummerierung wird Speicher verbraucht!

Deine 1+ min dauernde Berechnung, sowie die Fortschrittanzeige sollte besser in ein TimerCallback, einfach mal suchen.
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
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Alantope hat geschrieben: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.
Da gibt es zwei Möglichkeiten, wenn es viele kleine Berechnungen sind die für sich schnell sind aber in der Masse lange brauchen kannst du immer alle 1000 Schritte oder so eine Eventabfrage machen und die ProgressBar updaten.
Andernfalls musst du entweder das Fenster (komplett) oder die Berechnung in einen Thread auslagern, dann kannst du das Fenster wie gewohnt bedienen...
(\/) (°,,,°) (\/)
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

Dafuer bieten sich Konstanten doch gerade zu an.
Vielleicht habt Ihr Recht und ich sollte es einfach mal versuchen. Aber so richtig verstehe ich den Vorteil einer Konstanten nicht.

Bzgl. meiner Schleife von oben habe ich - so glaube ich zumindest - jetzt die Lösung gefunden, wenn ich Wait WindowEvent durch WindowEvent ersetze.

Jetzt aber noch ein wahrscheinlich ganz dumme Frage: Wie erhalte ich den Button auch in der Hintergrundfarbe? Mein Farbbefehl in dem Beispiel bewirkt nämlich rein gar nichts.
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 »

Alantope hat geschrieben:
Dafuer bieten sich Konstanten doch gerade zu an.
Vielleicht habt Ihr Recht und ich sollte es einfach mal versuchen. Aber so richtig verstehe ich den Vorteil einer Konstanten nicht.
Sind erstens einfacher zu merken, zweitens wird mit ButtonGadget(705, ...)
Speicher für 706 Buttons verbraten.
Alantope hat geschrieben: Bzgl. meiner Schleife von oben habe ich - so glaube ich zumindest - jetzt die Lösung gefunden, wenn ich Wait WindowEvent durch WindowEvent ersetze.
Nein, durch WaitWindowEvent(timeout), ist besser als WindowEvent() mit Delay und ohne Delay wird die CPU verbraten, da wird Dir jeder Dein Programm an den Kopf hauen
Alantope hat geschrieben: Jetzt aber noch ein wahrscheinlich ganz dumme Frage: Wie erhalte ich den Button auch in der Hintergrundfarbe? Mein Farbbefehl in dem Beispiel bewirkt nämlich rein gar nichts.
Buttons unterstützen keine Farbe. Also selber basteln oder besser sein
lassen, farbige Buttons sind untypisch und häßlich
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 »

natürlich kannst du im Grunde alles in die selbe schleife packen und mit WindowEvent ohne Wait durchrödeln...
aber wie ts schon sagte, damit brätst du die CPU, sowas macht man nicht.

mit Konstanten sähe der Anfang deines Codes so aus:

Code: Alles auswählen

;Windows
Enumeration 
  #Window_7  
EndEnumeration

; Gadgets
Enumeration 
  #Win7_Text
  #Win7_Progress
  #Win7_Button_Cancel
  #Win7_Button_Test
EndEnumeration

OpenWindow(#Window_7, #PB_Ignore, 0, 405, 160, "Test", #PB_Window_SystemMenu | #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  SetWindowColor(#Window_7, Hintergrundfarbe)
  FontID1 = LoadFont(#PB_Any, "Arial", 12)
  TextGadget(#Win7_Text, 40, 20, 240, 20, "Bitte warten")
  SetGadgetFont(#Win7_Text, FontID1)
  SetGadgetColor(#Win7_Text, #PB_Gadget_BackColor, Hintergrundfarbe)
  ProgressBarGadget(#Win7_Progress, 40, 60, 330, 30, 0, 100, #PB_ProgressBar_Smooth)
  SetGadgetColor(#Win7_Progress, #PB_Gadget_BackColor, Hintergrundfarbe)
  ButtonGadget(#Win7_Button_Cancel, 260, 110, 110, 30, "Abbrechen")
  ButtonGadget(#Win7_Button_Test, 40, 110, 110, 30, "Test")
  SetGadgetFont(#Win7_Button_Cancel, FontID1) 
... und wie ts auch schon sagte:
Buttons unterstützen keine geänderte Farben. (außer bei der Schrift)
Alantope
Beiträge: 10
Registriert: 10.01.2009 14:51

Beitrag von Alantope »

O.K. Danke vielmals allen für die Hilfe. Ihr habt mir echt super weitergeholfen, da ich mich schon länger mit diesen Problemen rumgeärgert habe. Nebenbei habe ich auch noch etwas für eine bessere Speicherausnutzung und geringere CPU-Auslastung gelernt. Danke. <)
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

und wenn du jetzt noch die Code-Tags oben einfügst wäre es super! :)
Win11 x64 | PB 6.20
THEEX
Beiträge: 804
Registriert: 07.09.2004 03:13

Beitrag von THEEX »

Dann kannst vielleicht auch irgendwann anspruchsvolle Programme schreiben... ^^
Eine Art Query-Planner soll die Ausführung von Map/Reduce-Funktionen in Hadoop stark beschleunigen.
Antworten