Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 13.04.2008, 10:00 Titel: gtk: Dezimalkomma durch Dezimalpunkt ersetzen |
|
|
Wie mache ich das?
Ich möchte eine gtk-Progressbar mit Werten füttern,
durch meine Ländereinstellung (de utf8) werden Dezimalzahlen mit Komma anstelle eines Punktes dargestellt.
Das scheint gtk nicht zu verstehen, nur einer von vielen Versuchen:
Code: |
FOR i AS SINGLE = 0 TO 1 STEP 0.001
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), i)
print i
print MID(STR (i), 2) = "m"
NEXT
|
Die Progressbar wandert von Null auf nahezu 100%, keine Zwischenwerte!
Der erste print Befehl gibt mir Kommadezimalzahlen aus.
Der zweite print Befehl gibt mir ausschl. 0 aus.
Versuche mit 'Format' und 'Print Using' scheinens auch nicht zu sein... _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 10:33 Titel: |
|
|
Code: | print MID(STR (i), 2) = "m" |
kann nicht funktionieren, es ist ein vergleich. der code gibt 0 aus, da verglichen wird, ob die zweite stelle des strings ein m ist. Dein Problem an sich vestehe ich aber nicht ganz... Kann es einfach sein, dass die progressbar nur ganzzahlen zulässt? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 13.04.2008, 11:34 Titel: |
|
|
Danke für die Antwort
Die Progressbar läßt mit diesem Befehl Werte zwischen 0-1 zu,
mit sämtlichen Zwischenwerten, je nach:
gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (progressbar_fortschritt), 0.001)
aber es erwartet halt einen Punkt als Dezimaltrennzeichen
und den hab ich nicht.
Ich kann den Wert schon direkt setzen:
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), 0.52364)
Leider aber nicht in einer for/next Schleife, irgendwie muß ich das Komma durch einen Punkt ersetzen. _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 12:03 Titel: |
|
|
ääähm, nur mal so: wenn du eine Zahl als Parameter übergibst, dann gehört da IMMER ein Punkt und kein Komma hin, weil die Zahl nunmal nicht als string, sondern als binär gespeicherte Zahl übergeben wird. Es ist also völlig egal, ob deine Variable den wert 0.12 hat oder du 0.12 übergibst. es ist einfach das selbe.
Aber eine For-Schleife von 0.1 zu durchlafen, ist IMHO keine gute idee. mach es lieber so:
Code: | FOR i AS INTEGER = 0 TO 100
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), i/100)
NEXT |
_________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 13.04.2008, 14:16 Titel: |
|
|
Funktioniert leider auch nicht...
Code: |
FOR i AS SINGLE = 0 TO 1000
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), i/1000)
print i/1000
NEXT
|
print i/1000 zeigt nur Dezimalkommas ( 0,001 0,002 ... 0,999) und der Fortschrittsbalken
zeigt auch nur zwei Werte an: 0 oder 100%.
Da muß es doch einen Weg geben, das Komma durch einen Punkt zu ersetzen? _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 14:44 Titel: |
|
|
Wenn du mir verraten würdest, WO du das komma haben willst, wären wir wohl schon einen Schritt weiter.
1) Wenn du meinst, du brauchst ein Komma für die Funktion gtk_progress_bar_set_fraction, dann ist das falsch, denn der wird eine Binärzahl übergeben, und der ist es vollkommen egal, ob das system kommas oder punkte oder fragezeichen oder was auch immer anzeigt.
2) wenn du ein komma beim PRINT-Befehl haben willst, wäre das lösbar... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 13.04.2008, 15:18 Titel: |
|
|
Ich glaub wir reden aneinander vorbei...
Ich will kein Komma haben, sondern einen Punkt, weil:
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), 0,5)
nicht funktioniert,
wohl aber:
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), 0.5)
Und da machen mir halt die aktuellen Ländereinstellungen einen Strich durch die Rechnung. _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 15:25 Titel: |
|
|
öhm, na klar geht da kein komma. da geht kein komma, weil ein Komma in FreeBASIC nun mal ein Listenseperator ist. Die Ländereinstellungen sind FreeBASIC (entschuldige) scheißegal. FreeBasic interpretiert einen Punkt IMMER als das Dezimaltrennzeichen. Auch, wenn du es an eine Funktion aus einer x-beliebigen DLL weitergibst! _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 13.04.2008, 15:42 Titel: |
|
|
An dieser Stelle geb ich erstmal auf... _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 15:48 Titel: |
|
|
es wäre gut zu wissen, wie die deklaration für diese funktion überhaupt lautet... _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
stevie1401
Anmeldungsdatum: 04.07.2006 Beiträge: 133
|
Verfasst am: 13.04.2008, 17:35 Titel: |
|
|
Warum wandelst du die Zahl nicht einfach in einen STRING um? Mit dem kannst du doch machen was du willst... |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 13.04.2008, 17:52 Titel: |
|
|
kommt ja ganz drauf an, was die funktion wirklich haben will. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 13.04.2008, 18:09 Titel: |
|
|
Was für ein Datentyp ist eigentlich progressbar_fortschritt? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 14.04.2008, 17:39 Titel: |
|
|
Ich fürchte, das Problem liegt ganz woanders...
Schreib ich das so
Code: |
FOR i AS INTEGER = 0 TO 100
'gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), i/100)
gtk_progress_bar_update (GTK_PROGRESS_BAR (progressbar_fortschritt), i/100)
print i/100
sleep 50, 1
NEXT
|
seh ich in der konsole sämtliche Zwischenwerte, die Progressbar
springt aber von 0 auf nahezu 100%, aber erst nach Beenden der Schleife,
egal welchen der beiden gtk-Einträge ich nehme.
Füge ich noch eine Abbruchbedingung hinzu:
if i > 30 then exit for end if
passiert das Gleiche, nur bleibt hier die Progressbar auf 30% stehen.
Irgendwie wird die Progressbar erst nach Ablauf der Schleife aktualisiert.
Dementsprechend dürfte es nichts mit Dezimalkomma und Dezimalpunkt zu tun haben, wie ursprünglich angenommen...
@nemored
Code: |
dim shared progressbar_fortschritt as GtkWidget ptr
|
Code: |
progressbar_fortschritt = gtk_progress_bar_new ()
gtk_widget_show (progressbar_fortschritt)
gtk_box_pack_start (GTK_BOX (vbox9), progressbar_fortschritt, TRUE, FALSE, 0)
gtk_progress_bar_set_pulse_step (GTK_PROGRESS_BAR (progressbar_fortschritt), 0.1)
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (progressbar_fortschritt), ("Fortschritt"))
|
das ist durch mein script hier:
http://forum.qbasic.at/viewtopic.php?t=5481#75106
automatisch erstellt worden. _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 14.04.2008, 23:14 Titel: |
|
|
Code: | Irgendwie wird die Progressbar erst nach Ablauf der Schleife aktualisiert. |
Das könnte tatsächlich sein. Ist das bei anderen Schleifentypen (DO z. B.) auch so? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
basixx
Anmeldungsdatum: 29.03.2008 Beiträge: 10
|
Verfasst am: 15.04.2008, 19:28 Titel: |
|
|
Es ist leider bei anderen Schleifentypen genauso,
probiert mit do...until...loop und while...wend
Nach laaanger Suche hab ich das hier gefunden:
http://www.mail-archive.com/gtk-app-devel-list@gnome.org/msg10644.html
und 'gtk_main_iteration ()' scheint des Rätsels Lösung.
Code: |
FOR i AS INTEGER = 0 TO 100
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progressbar_fortschritt), i/100)
gtk_main_iteration ()
print i/100
sleep 50, 1
next
|
Das funktioniert so mit allen 3 Schleifenvaritionen,
Die Progressbar füllt sich nun langsam von 0 bis 100%.
Da soll mal einer draufkommen
werd noch ein wenig abwarten, bis ich den Thread als gelöst markiere.
Vielen Dank an alle Beteiligten. _________________ Gruß an alle FreeBasic Fans |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 15.04.2008, 19:32 Titel: |
|
|
Zitat: | Da soll mal einer draufkommen |
Ganz ehrlich, wenn man ein bisschen Erfahrung hat (und natürlich auch eine Refernz) kann man da durchaus draufkommen. Die Lib muss irgendwie das Fenster aktualisieren, sonst kannst du da nix sehen. Das ist bei der Windows-Programmierungs ganz ähnlich. Wenn du ganz viele Befehle in VB ausführst, die das Fenster verändern sollen, werden die Änderungen oft nicht direkt sichtbar. Man muss erst den Befehl "DoEvents" zwischenschalten, der unter anderem die aktualisierung der GUI zulässt.
Aber das gtk-Äquivalient dazu ist ein bisschen... kryptisch _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
|
|
Nach oben |
|
|
|