Unterschiedliche Größe?

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Unterschiedliche Größe?

Beitrag von gripslund » Mo 31. Mär 2008, 06:02

Hallo.
Habe ein auf meinem "großen" Rechner laufendes Programm mal auf meinem Notebook laufen lassen und stellte fest, dass das Hauptformular (FMain), welches per Programm Größe , Namen usw. erhält, nun (auf dem Notebook) zu klein ist. Es passen nicht mehr alle Buttons rein. Die Größenverhältnisse stimmen aber scheinbar.
Beide Monitore sind 1280 breit, Höhe einmal 1024, das Notebook nur 800.
Aber das dürfte doch nichts ausmachen, oder?
Beide Male ist Gambas 1.9.49 installiert, auf SuSE10.3+Packman.

gripslund

yoda
Moderator
Beiträge: 442
Registriert: Mo 2. Jan 2006, 22:35
Wohnort: bei Göttinge
Kontaktdaten:

Beitrag von yoda » Di 1. Apr 2008, 10:06

Moin

ich habe keinen Schimmer wiso warum aber spiel mal mit den Schriften.

mfg Yoda

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Do 10. Apr 2008, 20:51

Sorry für die späte Antwort.
Wie meinst Du das? Soll ich 'ne andere Schrift wählen oder 'ne andere Größe?

MfG

gripslund

Stefan.Klees
Foriker
Beiträge: 12
Registriert: Di 22. Apr 2008, 22:03
Wohnort: Beckingen
Kontaktdaten:

Beitrag von Stefan.Klees » Mi 23. Apr 2008, 08:07

gripslund hat geschrieben:Sorry für die späte Antwort.
Wie meinst Du das? Soll ich 'ne andere Schrift wählen oder 'ne andere Größe?

MfG

gripslund
Hallo gripslund,

Das "Auflösungsproblem" hast Du immer! Du musst Deiner Anwendung die entsprechende Dynamik mitgeben. Das ganze kannst Du z.B. über HPanel (gb.qt) lösen.

Gruß
Steven

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Mi 23. Apr 2008, 15:04

Danke für die Antwort,
aber: ich gebe doch via
ME.W=800
ME.H=260
die Größe vor, oder ist's nicht so einfach wie ich denke?
Zumindest die Breite sollte doch gleich bleiben, wenn schon beide Displays die gleiche Breite haben!?

gripslund

Stefan.Klees
Foriker
Beiträge: 12
Registriert: Di 22. Apr 2008, 22:03
Wohnort: Beckingen
Kontaktdaten:

Beitrag von Stefan.Klees » Mi 23. Apr 2008, 15:27

Hallo gripslund,

kannst Du mal den Code posten?

Gruß
Steven

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Mi 23. Apr 2008, 17:41

Hi,
Warnung voweg: ich bin kein Profi auf diesem Gebiet!
Hier ins Forum oder an Dich?

gripslund
[/code]

Stefan.Klees
Foriker
Beiträge: 12
Registriert: Di 22. Apr 2008, 22:03
Wohnort: Beckingen
Kontaktdaten:

Beitrag von Stefan.Klees » Mi 23. Apr 2008, 17:50

Hallo gripslund,

wer ist schon Profi. Stelle den Code bitte hier ein, das Forum lebt davon.

Gruß
Stefan

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Mi 23. Apr 2008, 17:56

Viel Vergnügen!

Code: Alles auswählen

' Gambas class file

  b[51] AS Button           ' das sind die Tasten
  n AS Integer              ' der Index der Tasten
  r AS Integer              ' der abgefragte Index der Tasten (Tag)
  
  TextBox1 AS TextBox       ' die "obere" Anzeige
  TextBox2 AS TextBox       ' die "untere" Anzeige

  Index AS Integer          ' erste oder zweite Zahl
  CalcMode AS Integer       ' + oder - oder * oder /
  Num1 AS Float             ' erste eingegebene Zahl
  Num2 AS Float             ' zweite eingegebene Zahl
  Erase AS Integer          ' Anzeige loeschen ?
  eingabe AS String         ' die gesamte Eingabe !
  lang AS Integer           ' Laenge der aktuellen Eingabe
  teil[255] AS String       ' max 255 Zeichen Laenge
  zahl AS String            ' String fuer Zwischensummen
  num[127] AS Float         ' die einzelnen Zahlen aus der gesamten Eingabe


PUBLIC SUB Form_Open()

  DIM x, y AS Integer       ' Schleifen-Variablen

  ME.Text = "Taschenrechner V0.02"
  ME.W = 800
  ME.H = 260
  ME.Center

  TextBox1 = NEW TextBox(ME) AS "Text"
  TextBox1.MoveScaled(2, 1, 52, 5)
  TextBox1.Font = Font["Nimbus Mono L,Bold,+1"]

  TextBox2 = NEW TextBox(ME) AS "Text"
  TextBox2.MoveScaled(2, 6, 52, 5)
  TextBox2.Font = Font["Nimbus Mono L,Bold,+1"]

  n = 0                       ' Index auf Null
  FOR y = 1 TO 3              ' die Tasten 1 bis 9
    FOR x = 1 TO 3
      INC n
      b[n] = NEW Button(ME) AS "btn"
      b[n].Tag = n
      b[n].Caption = n
      b[n].MoveScaled(53 + x * 6, 25 - y * 4, 5, 3)
      b[n].Font = Font["Bold"]
      b[n].Background = Color.Foreground
      b[n].Foreground = Color.SelectedForeground
      b[n].Text = Str(n)
    NEXT 
  NEXT 

  n = 0                      ' Taste 0 Null
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(59, 25, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = Str(n)

  n = 10                     ' das Komma
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(65, 25, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "."

  n = 11                     ' die Exp-Taste (noch nicht verwendet)
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(71, 25, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = &H777777&
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "EE"

  n = 12                     ' BackSpace
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(77, 13, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = &HFF0000&
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "BS"

  n = 13                     ' Break
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(83, 13, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = &HFF0000&
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "BRK"

  n = 14                     ' Multiplikation
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(77, 17, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "*"

  n = 15                     ' Division   
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(83, 17, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "/"

  n = 16                     ' Addition
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(77, 21, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "+"

  n = 17                     ' Subtraktion
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(83, 21, 5, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "-"

  n = 18                     ' Execute -> "="
    b[n] = NEW Button(ME) AS "btn"
    b[n].Tag = n
    b[n].Caption = n
    b[n].MoveScaled(77, 25, 11, 3)
    b[n].Font = Font["Bold"]
    b[n].Background = Color.Foreground
    b[n].Foreground = Color.SelectedForeground
    b[n].Text = "EXE"

'  TextBox1.text = "_"
  TextBox1.text = "_"
  TextBox2.text = "Ready"
  CalcMode = 0
  Erase = 0
  lang = 0

END
'---------------------------------------------------------------------------------------------------------------------------
PUBLIC SUB btn_Click()
  DIM a, b, c, ll, x, y, z AS Integer
  r = LAST.Tag                                ' Tag der zuletzt gedrueckten Taste auslesen
  IF r < 10 THEN                              ' 0 - 9 sind die Ziffern
    IF TextBox1.text = "_" THEN TextBox1.text = ""
    IF Erase = 1 THEN TextBox1.text = ""      ' Zuvor EXE gedrueckt -> neue Rechnung steht an
    TextBox1.text = TextBox1.text & Str(r)
    Erase = 0
  ENDIF 
  IF r = 10 THEN                              ' Komma-Taste
    IF Erase = 1 THEN TextBox1.text = ""
'    IF InStr(TextBox1.text, ",") = 0 THEN     ' Komma schon mal gedrueckt ?
    IF Right(TextBox1.text, 1) <> "," THEN    ' zwei Komma hintereiander ?
      TextBox1.text = TextBox1.text & ","
      Erase = 0
    END IF
  ENDIF 
  IF r = 11 THEN                              ' Exp-Taste (geht noch nicht!)
  ENDIF 
  IF r = 12 AND Len(TextBox1.text) > 0 THEN                              ' BackSpace
    TextBox1.text = Left$(TextBox1.text, Len(TextBox1.text) - 1)
  ENDIF 
  IF r = 13 THEN                              ' BRK-Taste -> alles auf Null
    lang = 0
    TextBox1.text = "_"
    TextBox2.text = "Ready"
    Index = 0
    CalcMode = 0
  ENDIF 
  IF r = 14 THEN                              ' Multiplikation
    IF TextBox1.text = "_" THEN TextBox1.text = "0"
    TextBox1.text = TextBox1.text & "*"
  ENDIF 
  IF r = 15 THEN                              ' Division
    IF TextBox1.text = "_" THEN TextBox1.text = "0"
    TextBox1.text = TextBox1.text & "/"
  ENDIF 
  IF r = 16 THEN                              ' Addition
    IF TextBox1.text = "_" THEN TextBox1.text = "0"
    TextBox1.text = TextBox1.text & "+"
  ENDIF 
  IF r = 17 THEN                              ' Subtraktion
    IF TextBox1.text = "_" THEN TextBox1.text = "0"
    TextBox1.text = TextBox1.text & "-"
  ENDIF 
  IF r = 18 THEN                 ' EXE-Taste (=), jetzt geht's los
    eingabe = TextBox1.text
    lang = Len(TextBox1.text)
    IF lang > 0 AND TextBox1.text <> "_" THEN 
      FOR x = 0 TO 254                          ' Feld loeschen
        teil[x] = ""
      NEXT 
      FOR x = 0 TO 126                          ' Feld loeschen
        num[x] = 0
      NEXT 
      FOR x = 1 TO lang                         ' die Eingabe in einzelne Zeichen zerlegen
        teil[x] = Mid(eingabe, x, 1)
      NEXT 
      y = 0                      ' Index fuer die Anzahl der Zahlen und Rechenoperationen-1
      zahl = ""
      FOR x = 1 TO lang + 1
        IF teil[x] <> "+" AND teil[x] <> "-" AND teil[x] <> "*" AND teil[x] <> "/" THEN 
          zahl = zahl & teil[x]  ' Zahl zw. den Rechenoper. zusammensetzen
          IF InStr(zahl, ",") > 1 THEN 
            TextBox2.text = "=> zuviel Komma in "
'            STOP 
          END IF
        ENDIF 
        IF teil[x] = "+" OR teil[x] = "-" OR teil[x] = "*" OR teil[x] = "/" OR teil[x] = "" THEN 
          INC y                  ' Rechenoper. rausfiltern und alles zaehlen
          num[y] = Val(zahl)
          teil[y] = teil[x]
          zahl = ""
        ENDIF
      NEXT 
      FOR ll = 1 TO y             ' Punktrechnung ( * oder / )
        IF teil[ll] = "*" OR teil[ll] = "/" THEN 
          IF teil[ll] = "*" THEN 
            num[ll] = num[ll] * num[ll + 1]
          ELSE IF teil[ll] = "/" THEN 
            num[ll] = num[ll] / num[ll + 1]
          END IF
          FOR b = ll + 1 TO y     ' den Rest nach Links schieben
            num[b] = num[b + 1]
            teil[b - 1] = teil[b]
          NEXT 
          DEC ll                  ' wieder vorn anfangen mit der Suche
        END IF
      NEXT 
      FOR ll = 1 TO y             ' Strichrechnung ( + oder - )
        IF teil[ll] = "+" OR teil[ll] = "-" THEN 
          IF teil[ll] = "+" THEN 
            num[ll] = num[ll] + num[ll + 1]
          ELSE IF teil[ll] = "-" THEN 
            num[ll] = num[ll] - num[ll + 1]
          END IF
          FOR b = ll + 1 TO y     ' den Rest nach Links schieben
            num[b] = num[b + 1]
            teil[b - 1] = teil[b]
          NEXT 
          DEC ll                  ' wieder vorn anfangen mit der Suche
        END IF
      NEXT 
      TextBox2.text = num[1]      ' das Ergebnis steht IMMER ganz vorn (Index 1)
    END IF
    Index = 0
    CalcMode = 0
    Erase = 1
    lang = 0
  ENDIF 
END
'============================================================================================================================

'27.03.2008
'- alles ein wenig umgestrickt

'29.03.2008
'- Versuch, dass es so wie beim FX-880P funktioniert

'11.04.2008
'- Punkt- vor Strichrechnung funktioniert, jeweils von links nach rechts

Ich hoffe, ihr kommt klar damit. Wenn nicht fragen.
Es funktioniert bei mir so wie es oben steht auf meinem Notebook (1280*800).

gripslund

Stefan.Klees
Foriker
Beiträge: 12
Registriert: Di 22. Apr 2008, 22:03
Wohnort: Beckingen
Kontaktdaten:

Beitrag von Stefan.Klees » Mi 23. Apr 2008, 18:18

Hallo gripslund,

das ging ja schnell. Mal vorweg, wieso nimmst Du bei einem Taschenrechner nicht die Eval Componente von Gambas??

Code: Alles auswählen

Summe = Eval("(3+3)*3+(2+4)")' Rückgabewert Variant
Dein Code würde sich extrem kürzen.

Gruß
Stefan

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Mi 23. Apr 2008, 18:31

Danke für den Tipp.
Aber mal ehrlich: das kann jeder! Ich will es mal per Hand versuchen, wenn es sich (für mich) als nicht realisierbar erweist, dann habe ich ja jetzt 'ne Rückfallebene. Soweit war ich noch nicht vorgedrungen, ist nämlich nur ein Hobby.
Jedenfalls schon wieder dazugelernt, Danke.

gripslund

Stefan.Klees
Foriker
Beiträge: 12
Registriert: Di 22. Apr 2008, 22:03
Wohnort: Beckingen
Kontaktdaten:

Beitrag von Stefan.Klees » Mi 23. Apr 2008, 18:59

Hallo gripslund,

Du bist ja mutig, aber, wenn es nur für Dich ist, ist es ja OK.

Ich vermute bei Deinem Layout hängt es an MoveScale. http://gambasdoc.org/help/comp/gb.qt/desktop/scale

Üblicherweise erstellt man die Gui für einen Taschenrechner statisch da sich ja nichts an den Tasten verändert. Wieso also dynamische Erstellung (das Programmieren kann man sich auch unnötig schwer machen) zusätzlich bläht es Deinen Code unnötig auf.


Gruß
Stefan

gripslund
Foriker
Beiträge: 34
Registriert: Sa 23. Jun 2007, 22:24
Wohnort: Hannover
Kontaktdaten:

Beitrag von gripslund » Mi 23. Apr 2008, 19:13

Wie das mit MoveScale funktioniert werde ich erst am WE erforschen können. Ich muss heute und morgen noch zum Nachtdienst.
Bis später und nochmals danke.

Schönes Wochenende an ALLE Leser.

gripslund

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste