C
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
(Klasse tab-panel%)
(define (test-dlg)
(define the-dialog
(new dialog%
(label "quux")))
(new message%
(label "foo
bar
baz")
(horiz-margin 10)
(vert-margin 10)
(parent the-dialog))
(send the-dialog show #t))
Wobei für solche Fälle man auch normale "Panes" nehmen könnte. Ist ja mehr ein Tiling-Konzept als ein MDI-Konzept.Nee, ich meine schon "windowed". Ich baue gerade den "sam"-Editor nach
Ich. Ich wollte eigentlich auch gar nicht verlinken, sondern nur fett darstellen. Na egal.Deine Verlinkung ist übrigens im Eimer.
Wobei das zugrundeliegende GTK+ das kann. Man könnte es also nachrüsten.MDI gibt es definitiv nicht, ich habe recherchiert.
[callback (lambda (button event)
(process "doas cdio -f cd0 tao archiv.iso"))])
Normalerweise sollte es immer so sein das das "aktuelle Verzeichnis" das ist von wo aus Du Dein Programm gestartet hast. Das sollte auch beim Aufruf von process so sein.Wie bekomm ich es hin, das er archiv.iso nicht im Standardhomeverzeichnis akzeptiert, sondern in dem Verzeichnis aus dem cdburn.rkt gestartet wurde, und zwar egal in welchem Verzeichnis cdburn auch immer gespeichert ist, das soll ja mit path oder so funktionieren.
(current-directory)
auch das aktuelle Verzeichnis zurück, so dass Du nachprüfen kannst, wo Du gerade bist.[callback (lambda (button event)
(process "doas cdio -f cd0 tao archiv.iso" #:set-pwd? #t))]
Danke @midnight, wenn ich cdburn.rkt mit drracket starte, funktioniert es, starte ich es direkt mit racket aus dem Verzeichnis ~/racket/gui/probe/cdburn.rkt. dann tut sich nix.Ich kann es gerade nicht testen, aber versuche mal folgendes:
Ist auf jeden Fall mal ein guter Tipp, danke.Ansonsten gibt(current-directory)
auch das aktuelle Verzeichnis zurück, so dass Du nachprüfen kannst, wo Du gerade bist.
Funktioniert erst mal nicht, werde weiter testen müssen. Auf jeden Fall muß ich die Doku wohl noch lesen, bis ich es kapiere. Es geht ja grundsätzlich darum, wie auch im DokuMaker, das eine gespeicherte Datei dorthin gespeichert wird, von wo aus das racket Programm gestartet wurde. Wahrscheinlich muß ich es innerhalb des Programmes als Variable oder Funktion definieren, so das ich immer den relativen Path habe. Im Augenblick seh ich den Wald vor lauter Bäumen nicht, vielleicht sollte ich mal Pause machen, damit ich wieder klarer sehe.Was Du sonst noch probieren kannst ist der #:set-pwd? Keyword-Parameter:
Und da ich gerade am Fragen bin:
Wie kann ich einem dialog seine absurden Maße austreiben?
Beispiel:
Code:(define (test-dlg) (define the-dialog (new dialog% (label "quux"))) (new message% (label "foo bar baz") (horiz-margin 10) (vert-margin 10) (parent the-dialog)) (send the-dialog show #t))
Führt zu:
Anhang anzeigen 3678
Dem Dialog explizit eine height zu geben ändert überhaupt nichts. Ich hatte es mal testweise probiert, stattdessen eine Messagebox für so was zu nutzen, das ist aber noch bescheuerter: Ab vier Zeilen (oder so) wird da automatisch eine Scrollbar eingefügt. Etwas wie (scrollbars #f) scheint es nicht zu geben.
Will keiner außer mir auch mal mehrzeiligen Text mit Racket ausgeben?
Nachtrag: Noch schöner: Das label in einer message scheint zeichenbeschränkt zu sein. Wenn ich zu viel reinschreibe, kriege ich eine "contract violation". Was für ein Unsinn.
#lang racket
(require racket/gui/base)
(define the-dialog
(new dialog% [label "quux"]))
(new message% [label "Es"] [parent the-dialog])
(new message% [label "war"] [parent the-dialog])
(new message% [label "einmal"] [parent the-dialog])
(new message% [label "vor"] [parent the-dialog])
(new message% [label "langer"] [parent the-dialog])
(new message% [label "Zeit..."] [parent the-dialog])
(send the-dialog show #t)
#lang racket
(define dirpath (current-directory))
print dirpath
#lang racket/gui
(define dirpath (current-directory))
; Erstellt einen Frame, indem die Frame% -Klasse instanziiert wird
(define frame (new frame% [label "Beispiel Button Click event"]))
; Erstellt eine statische Textnachricht im Frame
(define msg (new message% [parent frame]
[label "Bisher kein Ereignis..."]))
; Erstell einen Button im Frame
(new button% [parent frame]
[label "Klick mich"]
; Callback-Verfahren für einen Klick auf die Schaltfläche
[callback (lambda (button event)
(send msg set-label dirpath))])
; Zeigt den Frame, indem seine show-Methode aufgerufen wird
(send frame show #t)
#lang racket/gui
(define dirpath (current-directory))
(define frame (new frame% [label "foo"]))
(define msg (new message% [parent frame] [label (format "Du bist hier: ~a" dirpath)]))
(send frame show #t)
Ich würde es so machen:Labels funktionieren in Racket meines Wissens nach nur einzeilig. Wenn Du mehrzeilige labels benoetigst, muesstest Du das in etwas so realisieren:
#lang racket
(require racket/gui/base)
(define the-dialog
(new dialog% [label "quux"]))
(new message% [label "Es"] [parent the-dialog])
(new message% [label "war"] [parent the-dialog])
(new message% [label "einmal"] [parent the-dialog])
(new message% [label "vor"] [parent the-dialog])
(new message% [label "langer"] [parent the-dialog])
(new message% [label "Zeit..."] [parent the-dialog])
(new message% [label "\n DokuMaker: Version 0.9 \n\n Author: Ralli"] [parent the-dialog])
(send the-dialog show #t)
Ich würde es so machen:
Code:#lang racket (require racket/gui/base) (define the-dialog (new dialog% [label "quux"])) (new message% [label "Es"] [parent the-dialog]) (new message% [label "war"] [parent the-dialog]) (new message% [label "einmal"] [parent the-dialog]) (new message% [label "vor"] [parent the-dialog]) (new message% [label "langer"] [parent the-dialog]) (new message% [label "Zeit..."] [parent the-dialog]) (new message% [label "\n DokuMaker: Version 0.9 \n\n Author: Ralli"] [parent the-dialog]) (send the-dialog show #t)
Ist ein wenig umständlich, funktioniert aber zweizeilig.
Im Augenblick arbeite ich überhaupt nicht mit binarys. Ich habe für jedes Projekt einen eigenen Ordner unter ~/racket/gui. Meine scripts rufe ich grundsätzlich mit racket script.rkt auf. Das habe ich für Gui Progs natürlich mitr caja automatisiert, so das ich das Gui Script im Dateimanager nur anzuklicken brauche. Also (current-dir) ist nicht das, was ich brauche. Die Funktion gibt mir nämlich den path des Homeverzeichnis aus. Ich muß aber den path des Ordners ermitteln, aus dem das Script gestartet wurde. Man, das kann doch nicht so schwierig sein .... (ich meine aber nicht Dich). Also wieder stundenlang die Doku wälzen.... ich glaub ich werd welk....Die Frage ist nun, wie Du deine beiden Beispiele getestet hast? Wo liegen die scripts oder sind die als binary in /usr/local/bin? Wie rufst Du die scripts auf?
Im Augenblick arbeite ich überhaupt nicht mit binarys. Ich habe für jedes Projekt einen eigenen Ordner unter ~/racket/gui. Meine scripts rufe ich grundsätzlich mit racket script.rkt auf. Das habe ich für Gui Progs natürlich mitr caja automatisiert, so das ich das Gui Script im Dateimanager nur anzuklicken brauche. Also (current-dir) ist nicht das, was ich brauche. Die Funktion gibt mir nämlich den path des Homeverzeichnis aus. Ich muß aber den path des Ordners ermitteln, aus dem das Script gestartet wurde. Man, das kann doch nicht so schwierig sein .... (ich meine aber nicht Dich). Also wieder stundenlang die Doku wälzen.... ich glaub ich werd welk....
Werd ich gleich mal ausprobieren. Aber ich denke, ich habe die Lösung gefunden:Doch, current-dir ist eigentlich die Funktion, die Du benoetigst. Versuche mal dein Racket-GUI-script ohne Caja auszufuehren. Ich vermute stark, dass Caja evtl. irgendwo den path auf dein $HOME setzt.
#lang racket/gui
;(define dirpath (current-directory)) Home Verzeichnis
(define dirpath (path-only (path->complete-path (find-system-path 'run-file))))
(define frame (new frame% [label "foo"]))
(define msg (new message% [parent frame] [label (format "Du bist hier: ~a" dirpath)]))
(send frame show #t)
Labels funktionieren in Racket meines Wissens nach nur einzeilig. Wenn Du mehrzeilige labels benoetigst, muesstest Du das in etwas so realisieren:
Code:#lang racket (require racket/gui/base) (define the-dialog (new dialog% [label "quux"])) (new message% [label "Es"] [parent the-dialog]) (new message% [label "war"] [parent the-dialog]) (new message% [label "einmal"] [parent the-dialog]) (new message% [label "vor"] [parent the-dialog]) (new message% [label "langer"] [parent the-dialog]) (new message% [label "Zeit..."] [parent the-dialog]) (send the-dialog show #t)
Igitt... Danke!
#lang racket/gui
(define the-dialog
(new dialog% [label "quux"]))
(new message%
[label "Es\nwar\neinmal\nvor\nlanger\nZeit"]
[parent the-dialog])
(send the-dialog show #t)
Wir verwenden essentielle Cookies, damit diese Website funktioniert, und optionale Cookies, um den Komfort bei der Nutzung zu verbessern.
Siehe weitere Informationen und konfiguriere deine Einstellungen