1. Artikel
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forum
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Paules-PC-Forum.de
  2. Forum
  3. Programmierung
  4. XProfan
  5. Anregungen und Bugreports

Embedded Vars

  • H.Brill
  • 25. Januar 2025 um 11:45
  • H.Brill
    Stammuser
    Reaktionen
    504
    Beiträge
    1.184
    • 25. Januar 2025 um 11:45
    • #1

    Habe mal eine Frage zu den eingebetteten Variablen :

    Ich bräuchte globale Variablen zum Einbetten innerhalb einer Proc.

    Code
    Declare Handle edit1, btn1
    Declare String text1, text2, text3
    text1 = "Button1"
    text2 = "Button2"
    text3 = "Eingabe"
    Window 600, 400
    Create("Button", &HWnd, "\:text1;", 10, 10, 60, 25)
    Create("Edit",   &HWnd, "\:text3;", 10, 50, 120, 25)
    Init()
    WaitEnd
    Proc Init
    create("Button", &HWnd, "\:text2;", 10, 100, 60, 25)
    create("Edit",   &HWnd, "\:text3;", 10, 140, 80, 25)
    Locate 6, 1
    Print "Das ist \:text1;"
    EndProc
    Alles anzeigen


    Leider funktioniert das nicht in einer Proc,obwohl die Variablen ja global sind.

    Kann das jemand bestätigen ?

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 25. Januar 2025 um 12:30
    • #2

    Hallo, grüss dich.

    Ich spiele mit dem JRPC3 in XProfan4.

    Habe WIN10.

    Sie das Bild.

    Dein Text haut nicht so hin von der Widergabe. Ist Teiweise hinter einem Button.

    Dateien

    Bild3.jpg 87,8 kB – 0 Downloads
  • H.Brill
    Stammuser
    Reaktionen
    504
    Beiträge
    1.184
    • 25. Januar 2025 um 13:04
    • #3

    Das kommt aber auch von dem Locate

    Ein Locate 16, 1 (also auf einem freien Platz) macht es sichtbar. Hat also mit dem eigentlichen Fehler nichts zu tun.

    so ist es vielleicht besser zu sehen (nur Proc abgeändert) :

    Code
    Proc Init
    Declare String s 
    s = "RICHTIG !!!"
    create("Button", &HWnd, "\:text2;", 10, 100, 60, 25)
    create("Edit",   &HWnd, "\:text3;", 10, 140, 80, 25)
    create("Button", &HWnd, "\:s;",     10, 180, 80, 25)
    EndProc

    Mir geht es darum, daß das Editfeld und der Button nicht richtig beschriftet wird.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 25. Januar 2025 um 13:23
    • #4

    Offenbar kann man bei reinem XProfan keine globalen Variablen in einer lokalen Umgebung (Proc) einbetten. Wäre einen Hinweis in der Hilfe wert. Mit JRPC3 geht's. Da funktionieren auch Array-Variablen, was bei XProfan nicht hinhaut. Aber ich finde die ausgeschriebene Variante mit "..."+@chr$(Variable%)+"..." ohnehin übersichtlicher. Da kann man auch sicher sein, dass alles funktioniert.

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 25. Januar 2025 um 13:35
    • #5

    Ich nehme JRPC3.

    Dateien

    Bild4.jpg 13,69 kB – 0 Downloads
  • JörgG
    Stammuser
    Reaktionen
    575
    Beiträge
    1.192
    • 25. Januar 2025 um 15:26
    • #6

    hab ja mit xProfan nicht mehr so viel Übung. Was ist denn der Vorteil dieser (eher umständlichen) Verwendung von Variablen?
    Wenn ich die Variablen normal einsetze, werden sie, wie erwartet, in der proc Init korrekt verarbeitet.

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

  • H.Brill
    Stammuser
    Reaktionen
    504
    Beiträge
    1.184
    • 25. Januar 2025 um 16:12
    • #7
    Zitat von Jens-Arne

    "..."+@chr$(Variable%)+"..."

    Du meinst wohl

    Code
    "..."+STR$(Variable%)+"..."

    denke ich. Ein besonderer Nutzen, oder Spezialfall, wo die embedded Variablen nützlich wären, fallen mir jetzt auf die Schnelle auch nicht ein. Vielleicht stolpere ich ja irgendwann darüber. Was man vielleicht sagen kann, ist, daß man einen zusätzlichen Funktionsaufruf (Str$() ) bei numerischen Variablen spart, weil da die automatische Typkonvertierung greift bzw. RGH das dort erledigt.

    Vielleicht habe ich mich auch zu sehr an die embedded - Geschichte gewöhnt. Wie auch immer :

    Globale Variablen sollten auch bei dieser Konstellation funktionieren, denke ich. Der Sinn und Zweck von embedded Vars sei mal dahin gestellt. Sie sind nun mal da und sollten dann auch richtig funktionieren.

    Was in diesem Zusammenhang noch interessant ist, ist folgende Spielerei :

    Code
    Cls
    Declare Long wert
    wert = 50
    Print "Ich bin " + wert + " Jahre alt."
    Print "Ich bin " + Str$(wert) + " Jahre alt."
    Print "Ich bin \:wert; Jahre alt."
    waitkey

    Warum verschluckt XProfan das "Ich bin " beim ersten Print ?

    Wenn ich statt + ein ; einsetze, funktioniert es. Funktioniert auch nicht, wenn ich das einer Stringvariablen zuweise

    Code
    erg = "Ich bin " + wert + " Jahre alt."

    . Da scheint die automatische Konvertierung nicht bzw. nur zum Teil zu greifen.

    Oder bin ich da auf dem Holzweg ?

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

    Einmal editiert, zuletzt von H.Brill (25. Januar 2025 um 16:18)

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 25. Januar 2025 um 16:42
    • #8

    Ja, natürlich meinte ich @str$(), danke für den Hinweis.

    Und ebenfalls ja, bei Deinem Beispiel scheint die interne Typumwandlung nicht richtig zu funktionieren. So ist das mit Sachen, die erst nach und nach dazugebastelt wurden. Auch da würde ich immer selbst mit @str$() konvertieren; sonst weiß man nie so recht, was dabei eigentlich herauskommt.

  • Volkmar
    Moderator
    Reaktionen
    6.973
    Beiträge
    6.906
    • 25. Januar 2025 um 16:46
    • #9

    Mir scheint, als hätte x + Zahl als Ergebnis einen numerischen Typ und x + String einen Stringtyp. String + Zahl macht dann als Ergebnis eine Zahl, der String ist 0 und wird zur Zahl addiert. Zahl + String ist dann als Ziel immer ein String, damit fällt dann bei String1 + Zahl + String2 String1 einfach weg, weil er den numerischen Wert 0 hat. Erst beim Hinzufügen von String2 ist das Ziel ein Stringtyp. Es wird also vermutlich schrittweise geprüft, welche Umwandlung sinnvoll ist und nicht schon das Gesamtergebnis vorweg als Ergebnistyp berücksichtigt.

    Gruß Volkmar

  • H.Brill
    Stammuser
    Reaktionen
    504
    Beiträge
    1.184
    • 25. Januar 2025 um 17:09
    • #10

    Ich habe mir schon von Anfang an angewöhnt, diese automatische Konvertierung NICHT zu nutzen und nach alter Manier zu arbeiten. Ich gebe zu, daß in den vergangenen Jahren solche Variant-Variablen in einigen Sprachen (glaube in Perl oder Java) dazu gekommen sind, war aber nie ein Freund von diesen.So wie ich RGH's automatische Konvertierung verstanden habe, wird jeweils zu dem Ergebnistyp (erg =) hin konvertiert. Steht auch irgendwo so in der Hilfe. Daß da irgendwann mal Stolpersteine auftreten, ist klar. Auch RGH kann nicht an wirklich alles oder spezielle Konstellationen denken.

    Das einzige, was ich auch gerne nutze, sind die Escape-Sequenzen. Ich denke, daß RGH die embedded Variablen irgendwann mal davon abgeleitet hatte und es uns als Schmankerl beschert hatte. Aber über den Sinn dieser Escape-Sequenzen könnte man ja auch diskutieren. Kann man auch alle selber zu Fuß machen. Es sind halt so gewisse Erleichterungen, die uns RGH bieten wollte.

    Manches ist ja auch sinnvoll und gut so.

    Wir sind die XProfaner.

    Sie werden von uns assimiliert.

    Widerstand ist zwecklos!

    Wir werden alle ihre Funktionen und Algorithmen

    den unseren hinzufügen.

  • JörgG
    Stammuser
    Reaktionen
    575
    Beiträge
    1.192
    • 25. Januar 2025 um 17:13
    • #11

    Liegt sicherlich daran, dass zum Verketten von Strings & Zahlen das ";" oder "," gedacht ist.
    Das ";" für nahtlos und "," mit 1x Leerzeichen dazwischen.
    Ein "+" ist ja ein Rechenoperator und möglicherweise funktioniert er nur zufällig, wenn zur Zahl ein Text addiert werden soll. Wenn zum Text eine Zahl addiert werden soll, interpretiert xprofan den Text als 0 und stellt dann einfach als Ergebnis 0+wert=50 dar.
    Ist Gewohnheitssache. Ich arbeite zum Verketten von Text oder Zahlen von Anfang an mit ";" oder ",".
    So erkenn ich recht schnell im Quellcode, ob ich gerade rechne oder Sringoperationen mache :)

    Edit: ok - hat sich jetzt überschnitten - hab etwas getrödelt/pausiert beim Schreiben :)

    Gruß Jörg

    Ideen gibt es viele - man muß sie nur haben...
    Linux Mint / LMDE / Antix

  • funkheld
    Fortgeschrittener
    Reaktionen
    3
    Beiträge
    364
    • 26. Januar 2025 um 09:18
    • #12

    Jens-Arne hat mit dem JRPC3 einige Krüppel-Hürden vom dem XPROFAN genommen für uns Porgrammierer. Dadurch ist da XPROFAN angenehmer geworden.

    Auch Anfänger können jetzt damit umgehen.

    Danke Jens-Arne für deine Entwicklung von JRPC3. :top::top::top:

    Gruss

  • Jens-Arne
    Schüler
    Reaktionen
    98
    Beiträge
    116
    • 27. Januar 2025 um 14:18
    • #13

    Gern geschehen! :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Windows 11

  1. Datenschutzerklärung
  2. Impressum
Community-Software: WoltLab Suite™