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:

FBIDE: Unterschied "Quick-Run" und "Compile+R

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



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 24.12.2013, 00:55    Titel: FBIDE: Unterschied "Quick-Run" und "Compile+R Antworten mit Zitat

Kann mir jemand erklären, warum sich mein Programm leicht unterschiedlich verhält, je nachdem ob ich es in FBIDE mit "Quick Run" laufen lasse, oder mit "Compile+Run"?
Für diejenigen, die eine andere IDE verwenden: Auch bei "Quick Run" wird das Programm compiliert, aber als temporäre exe-Datei (mit Namen fbidetemp.exe) gespeichert. Es *dürfte* also keinen Unterschied geben...
Die temporäre Datei und die "eigentliche" exe haben die selbe Größe, und unterscheiden sich in exakt 2 x 2 Bytes.

Grüße
Rainer


Zuletzt bearbeitet von TimesChange am 24.12.2013, 02:15, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 24.12.2013, 01:27    Titel: Antworten mit Zitat

"Quickrun" erzeugt eine temporäre exe, nicht "Run". "Run" startet eine bereits existierende exe mit dem Namen der bas.

Da sich FBIDE die Parameter für alle fbc-Aufrufe teilt, sollte es eigentlich keine Unterschiede geben (bis auf den Namen der exe). Wie äußert sich denn dieses "unterschiedliche Verhalten"? Was hast du unter Settings>FreeBASIC beim fbc-Aufruf eingestellt?

Achte auch darauf, dass eine alte Compile+Run-Datei nicht zufällig noch irgendwo läuft. Es könnte nämlich sein, dass dein Compile+Run und Run scheitern, weil irgendwer die exe noch nutzt und deswegen die Datei gesperrt ist, während Quickrun ja auch immer ohne Speichern eine temporäre exe für den aktuellen Code erstellt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 24.12.2013, 02:48    Titel: Antworten mit Zitat

Sorry (und Danke für's Anpassen des Titels), da habe ich die Begriffe "Run" und "Quick-Run" durcheinander gebracht. Gemeint habe ich in der Tat QuickRun.

Vorab: Ich habe zwar die fragliche FBIDETEMP.EXE gesichert, aber nicht den entsprechenden Zwischenstand der .bas und der mit Compile+Run erzeugten exe-Datei. Und jetzt kann ich das abweichende verhalten nicht mehr reproduzieren. Wer sich also denkt, das Problem sitzt wie üblich vor dem Rechner, und der bildet sich das nur ein, der muss nicht weiterlesen... zwinkern
Bei diesem Portierungsprojekt hab eich mich schon manchmal so dämlich angestellt, dass mich selber nichts mehr wundern würde. Aber in diesem Fall habe ich es mehrfach überprüft, weil ich es nicht glauben konnte.

Hintergrund: Das Programm ist ursprünglich für QB geschrieben.

Geäußert hat es sich folgendermaßen:
Ich habe Felder eines UDT, in die ich Suchbegriffe eingeben will.
Für die Eingabemaske will ich zunächst den Eingabebereich "markieren", in dem ich mit PRINT eine entsprechende Anzahl von Leerzeichen für das jeweilige Element ausgebe. Die Einzelnen Elemente sind als Strings fester Länge definiert.
Unter Quickbasic habe ich dazu einfach den Adressensatz mit dem Index 0 ausgegeben. Beim Programmstart wurden alle Elemente von Index 0 auf 1 Leerzeichen gesetzt (z.B. von Adr(0).NN=" ").
Adr(0).NN enthält also im ersten Bit den Wert 32, gefolgt von lauter Nullen.

Das "Markieren" sieht so aus:
Code:

TYPE AdrType
     VN   AS STRING * 20
     NN   AS STRING * 35
        ...
END TYPE

...

' "Markieren:"

     PRINT Adr(0).VN: LOCATE 14, 23
     PRINT Adr(0).NN: LOCATE 16, 23
     ...



Bei Aufruf mit QuickRun werden wie gewünscht und wie unter QB Leerzeichen-Strings in Länge der FixedString ausgegeben, also bei Adr(0).NN 35 Leerzeichen.

Bei Compile+Run bzw. Aufruf der compilierte Exe, wurde 1 Leerzeichen ausgegeben, gefolgt von 31 "nicht druckbaren" Zeichen, angezeigt als Rechteck.

Ich habe die Datei mehrfach neu compiliert und überprüft, das Ergebnis war immer dasselbe.
Das "Problem" der unerwünschten Ausgabe habe ich durch entsprechende SPACE(x) Befehle gelöst, aber ich verstehe nicht woher der Unterschied kommt.

Dass die "alte" exe noch lief, glaube ich ausschließen zu können.

Unter SETTINGS ist als Compile command der Standard "<$fbc>" "<$file>" eingetragen.

Grüße
Rainer


Ach ja: Frohe Weihnachten !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 28.12.2013, 13:38    Titel: Antworten mit Zitat

Und wieder das gleiche:
Heute FBIDE geöffnet und .bas-Datei geladen.
Beim Ausführen mit "RUN" sieht meine Eingabemaske so aus:




Die mit "Compiler" erzeugte .exe-Datei aufgerufen, ergibt folgende Maske:



Und was ich jetzt gar nicht mehr kapiere: Nächster Start von FBIDETEMP.EXE mit "RUN" zeigt auf einmal dasselbe Bild wie Bild2 oben, also mit den "Kästchen"...

Woran kann das liegen?

Grüße
Rainer

EDIT:
Jetzt bin ich ein bisschen schlauer.
Wie ihr an den Bildern oben seht, habe ich unterschiedliche Schriftarten verwendet. Bei FBIDETEMP "Rasterschriftart" als Standard für das Konsolenfenster, bei "meiner" exe "Lucida Console".
Wenn ich jetzt bei der exe von "Lucida Console" auf Rasterschriftart wechsle, wird die Maske wieder ohne Kästchen angezeigt.
Wechsel zurück auf "Lucida Console" -> Maske immer noch ok, ohne Kästchen...

Es liegt also offenbar nicht daran, dass unterschiedlich compiliert wird, sondern nur an der unterschiedlichen Darstellung je nach Schrifttyp.
Warum ein Zwischenwechsel zu Rasterschriftart dazu führt, dass sich die Anzeige mit Lucida Console ändert (vorher Kästchen, nachher keine Kätschen) ist mir schleierhaft, ist aber jedenfalls kein FBIDE-Problem.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.12.2013, 16:38    Titel: Antworten mit Zitat

TimesChange hat Folgendes geschrieben:
Es liegt also offenbar nicht daran, dass unterschiedlich compiliert wird, sondern nur an der unterschiedlichen Darstellung je nach Schrifttyp.
Warum ein Zwischenwechsel zu Rasterschriftart dazu führt, dass sich die Anzeige mit Lucida Console ändert (vorher Kästchen, nachher keine Kätschen) ist mir schleierhaft, ist aber jedenfalls kein FBIDE-Problem.

Das hat weder mit IDE noch mit dem Compiler zu tun. Die Schriftart im zweiten Screenshot kommt nicht mit den Zeichen klar, die du für die Maske verwendest. Daher diese falschen Sonderzeichen.

Du kannst die Schriftart für alle Konsolenfenster (Windows-weit) oder nur bestimmte Konsolenfenster anpassen. Das wäre hier der erste Lösungsweg.

Die zweite Möglichkeit wäre, die Maske nicht mit speziellen Zeichen darzustellen, sondern einfach mit Leerzeichen, die eine andere Hintergrundfarbe haben. Dann ist man nicht darauf angewiesen, dass die Konsolenschriftart ein bestimmtes "Kästchen-Zeichen" unterstützt. Der Nachteil der Methode ist, dass man immer wieder mit den Farben wechseln muss.

Hier ein kleines Beispiel:
Code:
color 0, 7
cls

Print "Hallo Welt"
Print
Print "Geben Sie Ihren Namen ein: ";

Color 14, 1
Print "                "

Dim As String Benutzername
Locate 3, 28: Input "", Benutzername

Color 0, 7

Print
Print "Ihr Name ist: "; Benutzername

Sleep
End


So sieht das dann aus:



Die Maske ist natürlich sehr minimalistisch und prüft z. B. nicht die maximale Eingabelänge. D. h. man kann einfach über das blaue Kästchen hinausschreiben.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
TimesChange



Anmeldungsdatum: 20.11.2013
Beiträge: 85

BeitragVerfasst am: 28.12.2013, 19:32    Titel: Antworten mit Zitat

Das mache ich eigentlich auch so.

Seltsam ist das unterschiedliche Verhalten, auch mit ein und derselben Schriftart:


Links nach Aufruf des Programms, rechts dasselbe Fenster, nur nach Ändern der Schrift auf Raster und zurück zu "Lucida Console".

Zur Klarstellung: Ich will keine "Kästchen" oder sonstige Sonderzeichen ausgeben, es soll lediglich der Eingabebereich mit Leerzeichen gefüllt werden, wie auch in deinem Beispiel.
Das war in QB mit String fester Länge kein Problem, da diese bei Initialisierung mit Leerzeichen gefüllt wurde, bei FB eben nun mit Nullen, was gelegentlich zu der seltsamen Ausgabe führt.
Na gut, dann muss ich eben die Strings zuvor "von Hand" mit 32 füllen...
Wichtig ist, dass nicht der Compiler "komische Sachen" macht, sondern offenbar die Konsole.

Grüße
Rainer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 28.12.2013, 20:31    Titel: Antworten mit Zitat

Ah, OK, verstehe.
TimesChange hat Folgendes geschrieben:
Das war in QB mit String fester Länge kein Problem, da diese bei Initialisierung mit Leerzeichen gefüllt wurde, bei FB eben nun mit Nullen, was gelegentlich zu der seltsamen Ausgabe führt.
Na gut, dann muss ich eben die Strings zuvor "von Hand" mit 32 füllen...

Vielleicht noch als Nachtrag zu meinem Kurzbeispiel von heute Nachmittag: Statt die Leerzeichen so "grobmechanisch" als Stringliteral in den Quelltext zu schreiben wie in dem Beispiel, könnte man auch in FB u. a. die STRING-Funktion benutzen:
Code:
print chr(34); string(16, "x"); chr(34)
print chr(34); string(16, " "); chr(34)  ' 16 Leerzeichen
sleep

_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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 -> Allgemeine Fragen zu FreeBASIC. 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