 |
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 |
Colle
Anmeldungsdatum: 25.05.2007 Beiträge: 21
|
Verfasst am: 29.11.2007, 22:32 Titel: Button im Screen erstellen |
|
|
Hallo und einen schönen Abend da draußen.
Ich möchte gerne in einem FreeBasic-Screen Buttons benutzen und habe mich für deren Erstellung schon mal ein wenig durch die Suchfunktion gewühlt.
Als Anfänger, mit gerade mal einjähriger Programmierpraxis überhaupt, wählte ich einen Ansatz eines anderen Users für das Erzeugen eines Buttons , der mir nachvollziehbar erschien und versuchte, damit zu arbeiten.
Bis zu einem bestimmten Punkt hat das auch funktioniert, obwohl ich nicht
genau sagen kann, warum. +
Code: | cls
DIM AS INTEGER x,y
DIM button AS INTEGER
DIM shared Buttonhintergrund as any ptr
DIM shared Buttondunkel as any ptr
Declare sub Buttonaktivweiter ()
SCREEN 14,32
'Einblenden des Buttonfeldes (mit Rahmen):
Buttonhintergrund = ImageCreate (240,320)
Bload "Buttonhintergrund.Bmp",Buttonhintergrund
put (0,0),Buttonhintergrund ,Pset
DO
GETMOUSE x, y,, button
IF BIT(button, 0) THEN
IF x >20 AND x<110 AND y>20 AND y<60 THEN
'Aufrufen des dunklen Buttonfeldes:
call Buttonaktivweiter ()
'Abfrage, um über Loop hinwegzuspringen:
IF x >20 AND x<110 AND y>20 AND y<60 THEN goto positionvor
END IF
END IF
LOOP
'irgendeine Aktion, um das Betätigen des Buttons zu kontrollieren:
positionvor:
LOCATE 12,4 : print "weiter im Programm"
sleep
'Unterprogramm für die optische Buttonfunktion:
sub Buttonaktivweiter ()
Buttondunkel = ImageCreate (40,90)
Bload "Button.dunkel.vor.Bmp",Buttondunkel
put (20,20),Buttondunkel ,Pset
end sub
|
In der folgenden Abbildung sieht man zwei Buttons.
Nachdem man den ersten betätigt hat, soll das Programm einfach fortfahren.
Das funktioniert.
Das Programm ruft das Unterprogramm für die Umfärbung des Buttons auf und springt dann über Loop hinweg zu der einfachen print "weiter im Programm" - Ausgabe.
Betätigt man den zweiten, soll das Programm an eine Stelle vor dem Benutzen des Buttons zurückspringen.
Ab hier bekomme ich's nicht mehr hin.
Eigentlich dachte ich, ich könne meine If -Abfrage für das Klicken innerhalb des ersten Buttonfeldes auf das zweite durch eine neue If-Abfrage ausdehnen.
Etwa so:
Code: |
GETMOUSE x, y,, button
IF BIT(button, 0) THEN
IF x > 20 AND x<110 AND y>20 AND y<60 THEN
IF x >110 AND x<200 AND y>20 AND y<60 THEN
'Aufrufen des dunklen Buttonfeldes:
call Buttonaktivweiter ()
call Buttonaktivzurueck ()
'Abfrage, um über Loop hinwegzuspringen:
IF x > 20 AND x<110 AND y>20 AND y<60 THEN goto positionvor
IF x >110 AND x<200 AND y>20 AND y<60 THEN goto positionzurueck
END IF
END IF
END IF
END IF |
Mit dem zugehörigen sub für das Umfärben des zweiten Buttons und der entsprechenden Sprungposition, die ich hier mal weglasse, da schon das "Aktivschalten" des zweiten Buttons nicht klappt.
Code: | sub Buttonaktivzurueck ()
Buttondunkel2 = ImageCreate (40,90)
Bload "Button.dunkel.zurueck.Bmp",Buttondunkel2
put (110,20),Buttondunkel2,Pset
end sub
|
Durch die weiteren If-Abfragen funktioniert der erste Button dann auch nicht mehr.
Bitte seid so lieb und schaut mal über mein Machwerk drüber.
Ich bin für jeden Vorschlag und Codevorschläge dankbar! 
Zuletzt bearbeitet von Colle am 30.11.2007, 00:16, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2007, 00:10 Titel: |
|
|
Code: | IF x > 20 AND x<110 AND y>20 AND y<60 THEN
IF x >110 AND x<200 AND y>20 AND y<60 THEN
...
END IF
END IF |
heißt so viel wie:
Wenn die erste Bedingung erfüllt ist, dann prüfe, ob die zweite Bedingung erfüllt ist - und erst wenn beides der Fall ist, dann tue das folgende. Das kann gar nicht klappen, weil sich die beiden Bedingungen gegenseitig ausschließen. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Colle
Anmeldungsdatum: 25.05.2007 Beiträge: 21
|
Verfasst am: 30.11.2007, 00:14 Titel: |
|
|
Hi.
Mir ist im Nachhinein auch aufgefallen, dass es logischwerweise
Code: |
IF x > 20 AND x<110 AND y>20 AND y<60 THEN
CALL Buttonaktivweiter ()
IF x >110 AND x<200 AND y>20 AND y<60 THEN
CALL Buttonaktivzurueck () | heißen muss, was aber leider auch nicht funktioniert.  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2007, 00:19 Titel: |
|
|
Code: | IF x > 20 AND x<110 AND y>20 AND y<60 THEN
CALL Buttonaktivweiter ()
END IF
IF x >110 AND x<200 AND y>20 AND y<60 THEN
CALL Buttonaktivzurueck ()
END IF |
P. S.: das CALL würde ich weglassen. Siehe http://www.freebasic-portal.de/index.php?s=reftopic&id=80 _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Colle
Anmeldungsdatum: 25.05.2007 Beiträge: 21
|
Verfasst am: 30.11.2007, 00:30 Titel: |
|
|
Hi.
Ich benutze noch den Compiler 16.0b, mit dem call noch funktioniert, habe es eben aber trotzdem mal gelöscht.
Ansonsten noch Vorschläge?  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4704 Wohnort: ~/
|
Verfasst am: 30.11.2007, 00:50 Titel: |
|
|
Ich würde die GOTOs nach Möglichkeit vermeiden. Vor allem mit einem GOTO aus einer Schleife herauszuspringen, ist "nicht die feine Art". Dafür eignet sich z. B. ein EXIT DO. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Colle
Anmeldungsdatum: 25.05.2007 Beiträge: 21
|
Verfasst am: 30.11.2007, 00:58 Titel: |
|
|
Hi nemored,
du hast mich gerettet.
Vergiss meine letzte Antwort!
Ich habe im Tran gar nicht gemerkt, wie du die If-Bedingungen geschlossen hattest.
Jetzt funktioniert es.
Vielen Dank nochmal und danke für dein Interesse!  |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 30.11.2007, 15:56 Titel: |
|
|
Du solltest trotzdem in Erwägung ziehen, auf eine neuere Version umzusteigen (0.18.2 ist die letzte). _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Colle
Anmeldungsdatum: 25.05.2007 Beiträge: 21
|
Verfasst am: 30.11.2007, 16:55 Titel: |
|
|
Hi.
Beim nächsten Projekt, OK.
Der Teil, für den ich die simplen Buttons benötige, hat einfach zu viele - teils alte - Befehlszeilen, um ihn noch für einen aktuellen Compiler fitt zu bekommen. |
|
Nach oben |
|
 |
Sebastian Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
Verfasst am: 30.11.2007, 19:09 Titel: |
|
|
Hallo,
wenn es sich um ein größeres Projekt handelt, könntest du auch noch überlegen, bereits vorhandene Teile, die nur mit Version 0.16 (wirklich ziemlich antiquiert) funktionieren, zu einer DLL zu compilieren und dann das Hauptprogramm an eine moderne Compilerversion angepasst zu schreiben und darin auf die Funktionen der DLL zurückzugreifen. Bei FreeBasic bestehen zwischen den Versionen - obwohl sich die Zahlen nur unauffällig unterscheiden - enorme Unterschiede, d.h. FB wird von Version zu Version besser und ungünstigere Sprachkonstruktionen werden durch bessere ersetzt. Informationen, wie man die neusten Programmversionen in Hinblick auf die Entwicklung mit FreeBasic beziehen kann, finden sich in einem Tutorial von FreeBasic-Portal.de.
Viele Grüße!
Sebastian _________________
Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen! |
|
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.
|
|