Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

gtk: Dezimalkomma durch Dezimalpunkt ersetzen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Linux-spezifische Fragen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 13.04.2008, 09:00    Titel: gtk: Dezimalkomma durch Dezimalpunkt ersetzen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 09:33    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 13.04.2008, 10:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 11:03    Titel: Antworten mit Zitat

äää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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 13.04.2008, 13:16    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 13:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 13.04.2008, 14:18    Titel: Antworten mit Zitat

Ich glaub wir reden aneinander vorbei...verlegen
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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 14:25    Titel: Antworten mit Zitat

ö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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 13.04.2008, 14:42    Titel: Antworten mit Zitat

An dieser Stelle geb ich erstmal auf...weinen
_________________
Gruß an alle FreeBasic Fans
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 14:48    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
stevie1401



Anmeldungsdatum: 04.07.2006
Beiträge: 133

BeitragVerfasst am: 13.04.2008, 16:35    Titel: Antworten mit Zitat

Warum wandelst du die Zahl nicht einfach in einen STRING um? Mit dem kannst du doch machen was du willst...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 13.04.2008, 16:52    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 13.04.2008, 17:09    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 14.04.2008, 16:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 14.04.2008, 22:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
basixx



Anmeldungsdatum: 29.03.2008
Beiträge: 10

BeitragVerfasst am: 15.04.2008, 18:28    Titel: Antworten mit Zitat

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 mit dem Kopf durch die Mauer wollen
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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 15.04.2008, 18:32    Titel: Antworten mit Zitat

Zitat:
Da soll mal einer draufkommen mit dem Kopf durch die Mauer wollen

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 verwundert
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Linux-spezifische Fragen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz