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:

Allegro GUI

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 07.10.2007, 11:05    Titel: Allegro GUI Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 07.10.2007, 12:00    Titel: Antworten mit Zitat

Vielleicht könnte dir das hier helfen, da DIALOG ein UDT zu sein scheint...
_________________
If hilfreicher_Beitrag then klick(location.here)

Klick
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 07.10.2007, 12:04    Titel: Danke, aber damit kann ich leider nix anfangen Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 07.10.2007, 12:13    Titel: Antworten mit Zitat

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, 21:31, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
stuner



Anmeldungsdatum: 29.06.2006
Beiträge: 45

BeitragVerfasst am: 07.10.2007, 12:15    Titel: Antworten mit Zitat

Was tut man nicht alles für Leute, die nett fragen....
Hier ist die Datei als 2 gezippte HTML dateien...(Formatierung ist leider verloren gegangen)

http://freestylegame.kilu2.de/downloads/Type%20als%20Objekt.zip

Edit: Jojo war wohl schneller
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 07.10.2007, 13:10    Titel: Gutes Dokument, aber das gesuchte ist nicht dabei. Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
csde_rats



Anmeldungsdatum: 07.01.2007
Beiträge: 2292
Wohnort: Zwischen Sessel und Tastatur

BeitragVerfasst am: 07.10.2007, 14:13    Titel: Antworten mit Zitat

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 zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 07.10.2007, 23:50    Titel: Super. Antworten mit Zitat

Das hat funktioniert. Danke. Habe statt der runden, geschweifte Klammern verwendet mit dem Kopf durch die Mauer wollen

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
Benutzer-Profile anzeigen Private Nachricht senden
PMedia



Anmeldungsdatum: 14.08.2006
Beiträge: 2847

BeitragVerfasst am: 08.10.2007, 00:15    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 08.10.2007, 00:31    Titel: Pustekuchen Antworten mit Zitat

Auch das führt leider zur gleichen Warnung. und zum Abbruch beim starten.
Hat vielleicht noch jemand ne andere Idee?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 08.10.2007, 10:14    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 08.10.2007, 15:33    Titel: Ach, diese Blindheit. Antworten mit Zitat

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. weinen 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
Benutzer-Profile anzeigen Private Nachricht senden
Martin



Anmeldungsdatum: 05.06.2007
Beiträge: 19

BeitragVerfasst am: 08.10.2007, 15:44    Titel: Problem behoben Antworten mit Zitat

Schuld sind die Tabs. Wenn ich diese aber automatisch vom Editor in Leerzeichen umwandeln lasse sitzt alles wie es soll. Klasse
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Bibliotheken 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