|
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 07.10.2007, 12:05 Titel: Allegro GUI |
|
|
Hallo Leute,
Habe gestern ein wenig mit der Allegro GUI herumgespielt. Dabei hat sich mir folgendes Problem in den Weg gestellt. Wie definiere ich einen Dialog. Die Variante wie sie unter C funktioniert, ist leider nicht drin. Also Code: | DIM Testdialog(0 TO 2) AS DIALOG => {{...},{...},{...}} |
weil sich einem UDT keine Werte mit {...} zuweisen lassen. Mit with funktioniert es, ist aber viel zu umständlich. Ich kann mich aber daran erinnern, dass es noch eine weitere Methode gibt, um UDTs ihre Werte zuzuweisen. Da gab es irgend einen Befehl, mit dem man einfach die Folge der Werte angeben kann. Wie war der nochmal??? *grübel*. Kann mir da vielleicht jemand weiterhelfen?
Danke |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 07.10.2007, 13:04 Titel: Danke, aber damit kann ich leider nix anfangen |
|
|
Danke für deine Antwort. So wie ich das sehe ist das aber ne Windowshilfe. Die kann ich bei mir unter Linux leider nicht öffnen. Oder zumindest nicht ohne größeren Aufwand. Hast du vielleicht noch ne andere Version, oder kannst du mir sagen wo ich so etwas finde?
Danke |
|
Nach oben |
|
|
Jojo alter Rang
Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 07.10.2007, 13:13 Titel: |
|
|
hab's mal eben schnell extrahiert...
temporär zu haben unter <link entfernt> _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Zuletzt bearbeitet von Jojo am 24.02.2008, 22:31, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
stuner
Anmeldungsdatum: 29.06.2006 Beiträge: 45
|
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 07.10.2007, 14:10 Titel: Gutes Dokument, aber das gesuchte ist nicht dabei. |
|
|
Sehr gute Beschreibung der neuen Objektorientierten Funktionen. Das kann ich auf jeden Fall gebrauchen. Helfen bei meinem Problem tut es aber nicht, da DIALOG keine objektorientierung nutzt. Es ist ein einfaches UDT, welches in der gui.bi der Allegro Lib definiert ist. Ich möchte diese eigentlich nicht umschreiben, wenn es einen einfacheren Weg gibt. Wenn nicht, werd ich mich mal dran setzen. Aber Vielleicht kennt ja einer Vielleicht ne einfachere Lösung.
Unter C sieht das folgendermaßen aus:
Code: |
DIALOG Testdialog[] = {
{ d_sonstwas_proc, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
{ d_sonstwas_proc, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL },
{ NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL }
}
|
Wie man hier sehen kann wird den UDTs also direkt mit {...} ein Wert zugewiesen, was aber unter FreeBASIC so nocht möglich ist. |
|
Nach oben |
|
|
csde_rats
Anmeldungsdatum: 07.01.2007 Beiträge: 2292 Wohnort: Zwischen Sessel und Tastatur
|
Verfasst am: 07.10.2007, 15:13 Titel: |
|
|
Code: | Testdialog(0) = {( d_sonstwas_proc, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL )} |
So müsste das gehen, (0) ist der Arrayindex wie in C [0] halt
EDIT:
Code: | #include "allegro/gui.bi"
dim as DIALOG Testdialog(0 to 2) = { _
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) _
} |
_________________ If hilfreicher_Beitrag then klick(location.here)
Klick |
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 08.10.2007, 00:50 Titel: Super. |
|
|
Das hat funktioniert. Danke. Habe statt der runden, geschweifte Klammern verwendet
Das währe geschafft. Da kommt aber auch schon das nächste Problem:
Das Programm:
Code: |
#INCLUDE "allegro.bi"
DIM AS DIALOG Testdialog(0 TO 2) = { _
(@d_box_proc, 0, 0, 100, 100, 1, 2, 0, 0, 0, NULL, NULL, NULL ) ,_
(@d_button_proc, 10, 10, 80, 20, 1, 2, 0, 0, 0, "Spielen", NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) _
}
allegro_init()
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0)
centre_dialog(@Testdialog(0))
do_dialog(@Testdialog(0), -1) |
Die Fehlermeldung:
Code: |
test.bas(7) error 25: Invalid data types, before ',' in '(@d_button_proc, 10, 10, 80, 20, 1, 2, 0, 0, 0, "Spielen", NULL, NULL ) ,_'
|
Der String "Spielen" wird nicht wie bei C so angenommen.
Also mal in der gui.bi nachgeschaut. Wir haben es hier mit einem ANY PTR zu tun.
Also brauchen wir einen Zeiger. Ist ein String kein Zeiger?
Wenn nicht, dann müsste man ja die Addresse übergeben. also habe ich folgendes probiert:
Code: |
DIM Text AS STRING = "Spielen"
DIM AS DIALOG Testdialog(0 TO 2) = { _
(@d_box_proc, 0, 0, 100, 100, 1, 2, 0, 0, 0, NULL, NULL, NULL ) ,_
(@d_button_proc, 10, 10, 80, 20, 1, 2, 0, 0, 0, @Text, NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) _
}
|
Darauf folgt die Warnung:
Code: |
test.bas(7) warning 5(0): Implicit conversion
|
Funktionieren tut es damit nicht. So wie ich das sehe, ist hier eine Typumwandlung nötig.
Wie realisiert man so etwas in FreeBASIC ? |
|
Nach oben |
|
|
PMedia
Anmeldungsdatum: 14.08.2006 Beiträge: 2847
|
Verfasst am: 08.10.2007, 01:15 Titel: |
|
|
Da die Allegro in C(++) geschrieben ist (AFAIK) würd ich als erstes folgendes probieren:
Code: | DIM Text AS ZSTRING * 64
Text = "Spielen"
DIM AS DIALOG Testdialog(0 TO 2) = { _
(@d_box_proc, 0, 0, 100, 100, 1, 2, 0, 0, 0, NULL, NULL, NULL ) ,_
(@d_button_proc, 10, 10, 80, 20, 1, 2, 0, 0, 0, @Text, NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) _
} |
Nat. ungetesteter Code... |
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 08.10.2007, 01:31 Titel: Pustekuchen |
|
|
Auch das führt leider zur gleichen Warnung. und zum Abbruch beim starten.
Hat vielleicht noch jemand ne andere Idee? |
|
Nach oben |
|
|
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 08.10.2007, 11:14 Titel: |
|
|
Normale Strings wachsen dynamisch, halt nicht so wie in C. Dazu brauchen sie aber auch einen Header, der vor dem eigentlichen String kommt. Mit @String bekommt man dadurch einen Pointer auf den Header. StrPtr liefert den Pointer auf den eigentlichen String. (Siehe http://www.fb-referenz.de/StrPtr)
ZStrings verhalten sich wie ein Char-Array in C, also den dortigen "Strings". _________________ Eine handvoll Glück reicht nie für zwei.
--
|
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 08.10.2007, 16:33 Titel: Ach, diese Blindheit. |
|
|
Oh man, bin ich blind.
Mit dem ZSTRING ist alles in Ordnung und der Tip mir STRPTR ist auch super. Das Problem lag ganz wo anders.
Das ganze ist ein wenig zu kurz geraten. Was so eine vergessene Null alles anrichten kann.
So stimmt's jetzt.
Code: |
#INCLUDE "allegro.bi"
DIM AS DIALOG Testdialog(0 TO 4) = { _
(@d_box_proc, 0, 0, 140, 100, 1, 2, 0, 0, 0, 0, NULL, NULL, NULL ) ,_
(@d_button_proc, 10, 10, 120, 20, 1, 2, 0, 0, 0, 0, STRPTR("Spielen"), NULL, NULL ) ,_
(@d_button_proc, 10, 40, 120, 20, 1, 2, 0, 0, 0, 0, STRPTR("Einstellungen"), NULL, NULL ) ,_
(@d_button_proc, 10, 70, 120, 20, 1, 2, 0, 0, 0, 0, STRPTR("Beenden"), NULL, NULL ) ,_
(NULL, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL ) _
}
allegro_init()
install_keyboard()
install_mouse()
set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800, 600, 0, 0)
centre_dialog(@Testdialog(0))
do_dialog(@Testdialog(0), -1)
|
Hoffentlich geht's bei den anderen GUI Elementen nicht so weiter.
Hätte noch eine Frage bezüglich des Forums. Bei mir verschiebt sich nämlich die schöne Ausrichtung des Codes beim Kopieren., mach ich muss es immer neu anordnen. Mach ich was falsch? |
|
Nach oben |
|
|
Martin
Anmeldungsdatum: 05.06.2007 Beiträge: 19
|
Verfasst am: 08.10.2007, 16:44 Titel: Problem behoben |
|
|
Schuld sind die Tabs. Wenn ich diese aber automatisch vom Editor in Leerzeichen umwandeln lasse sitzt alles wie es soll. Klasse |
|
Nach oben |
|
|
|
|
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.
|
|