Simple Buttons

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

maximilian

Betreff: Simple Buttons

BeitragSo, Mai 23, 2010 1:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Zuge des OOP-Fanatismus wird man ja sofort scheel angesehen wenn man mal ein simples Problem ohne riesiges Klassensystem drumrum löst.

Trotzdem möchte ich hier mal eine ganz einfache Art zeigen, wie man Buttons zum Anklicken durch eine einfache Funktion implementierne kann. Im Gegensatz zur typischen Implementierung als Klasse ist das ganze weniger rechenlastig und der Code ist deutlich kürzer.

BlitzMax: [AUSKLAPPEN]

SuperStrict


Function Button:Int(x:Short, y:Short, w:Byte, h:Byte, name:String, id:Byte)

Global mouse_state:Int = -1

DrawLine x, y, x+w-1, y
DrawLine x, y, x, y+h
DrawLine x+w-1, y, x+w-1, y+h
DrawLine x, y+h, x+w-1, y+h

If MouseDown(1) And MouseX() >= x And MouseY() >= y And MouseX() =< x+w And MouseY() =< y+h Then
DrawText name, x + w/2 - TextWidth(name)/2 + 2, y + h/2 - TextHeight(name)/2 + 2
mouse_state = id
Else
DrawText name, x + w/2 - TextWidth(name)/2, y + h/2 - TextHeight(name)/2
If mouse_state = id Then
mouse_state = -1
FlushMouse()
Return True
End If
End If

End Function



Graphics 640, 480, 0, 60


While Not KeyHit(KEY_ESCAPE)

Cls

If Button(100, 100, 100, 100, "SCHWARZ", 0) Then SetClsColor 0, 0, 0
If Button(100, 250, 100, 100, "ROT", 1) Then SetClsColor 255, 0, 0
If Button(250, 100, 100, 100, "GRUEN", 2) Then SetClsColor 0, 255, 0
If Button(250, 250, 100, 100, "BLAU", 3) Then SetClsColor 0, 0, 255
If Button(GraphicsWidth()-100, GraphicsHeight()-45, 90, 35, "Beenden", 4) Then End

Flip

Wend


Wenn man das ganze in einem Programm nutzen will lohnt es sich natürlich noch Bitmapgrafiken etc. einzubauen.
Variety is the spice of life. One day ignore people, next day annoy them.

Jolinah

BeitragSo, Mai 23, 2010 1:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja, ich weiss nicht ob man heutzutage für Buttons wirklich auf Rechenlast oder Speicherbelegung achten muss... aber ist auch nicht so dass ich was an der Funktion kritisieren möchte Wink

Ich denke letzten Endes ist das mit der OOP einfach Geschmackssache. Bei kleineren Projekten schreibe ich selber oft sowas in der Richtung, bei grösseren Projekten hingegen finde ich OOP im allgemeinen einfach übersichtlicher. In dem Fall hier wär aber wahrscheinlich die Funktion übersichtlicher, so lange der Button keine weitere Funktionalität erhält.

Jedenfalls ist die Funktion sicher sehr praktisch wenn man nur mal schnell irgendwo paar Buttons einfügen möchte und sonst keine GUI-Elemente benötigt Smile

tft

BeitragSo, Mai 23, 2010 2:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

OOp wird überbewertet,

Gruss TFT
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!

Thunder

BeitragSo, Mai 23, 2010 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verwende für meine Buttons immer nur so ein System, daher kann ich es nur empfehlen und begrüßen, dass es ins Codearchiv gestellt wurde.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

Ava

Gast

BeitragSo, Mai 23, 2010 10:50
Antworten mit Zitat
Ich mache das oft auch nicht anders. Und es funktioniert auch mit einigen anderen GUI-Elementen ganz gut. Exclamation

ComNik

BeitragSo, Mai 23, 2010 11:54
Antworten mit Zitat
Benutzer-Profile anzeigen
OOP finde ich persönlich sehr schön und nützlich.

Aber so eine schlichte Funktion hat auch was an sich^^
Vor allem für BCCs mit Code Begrenzung will man sicher nicht ein riesiges GUI Modul schreiben.

lg
ComNik
WIP: Vorx.Engine

Holzchopf

Meisterpacker

BeitragSo, Mai 23, 2010 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, ich persönlich find's ja jetzt grad ein bisschen gar simpel für's Codearchiv (ich benutze diese Variante schon lange und finde, dass da jeder drauf kommen kann). Aber da hier so viel positive Resonanz kommt, scheint diese Funktion, resp. Implementierung von Schaltflächen, für einige innovativ und nützlich zu sein, deshalb lasse ich sie jetzt da Wink

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

mpmxyz

BeitragSo, Mai 23, 2010 14:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde den Code auch etwas simpel. Aber er erfüllt seinen Zweck und ist einfach zu nutzen.
Die überschlagene Mikrosekunde, die er gegenüber der OOP-Lösung spart, ist aber eher zu vernachlässigen.
(So langsam ist OOP auch wieder nicht.)
Der Klassen-Overhead im Code fällt aber wirklich weg.
Nun zum off-topic:
OOP hat meiner Meinung nach eine Berechtigung.
Das Implementieren von abstrakten Algorithmen ist nämlich sehr mächtig.
Dadurch, dass hier viele Leute auch die Welt ohne dieses Werkzeug kennen, hat sich aber ein gesünderes Verhältnis als bei anderen Sprachen/Programmierern dazu gebildet.
Dort wird dann teilweise viel zu sehr mit Klassen, Interfaces und Private um sich geschmissen, anstatt sich darüber Gedanken zu machen, ob das nicht Möglichkeiten verbaut oder ob es einfachere Lösungen gibt.
(Wer die linked list in Java gut findet, hat die Vorteile von einer linked list nicht ganz verstanden.)
Dort wird man dann eher schief angeschaut, wenn man alternative Lösungswege nutzt, als hier.
(Mir ist das schon mehrmals passiert, als ich Lösungen zu Problemen nicht über Objekte sondern über Klassen in Java erstellte, da es meiner Meinung nach viel zu umständlich ist, erst ein LöseDasProblemXYZ-Objekt erstellen zu müssen, bevor man die Lösungsmethode starten kann. Da dies aber nicht OOPig genug war, kamen als Antwort die besagten schiefen Blicke.)
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

Thunder

BeitragSo, Mai 23, 2010 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
@mpmxyz: Natürlich hat es seine Berechtigung, aber ehrlich gesagt habe ich keine Lust für ein Spiel irgendeine (überladene) Supergui zu verwenden. Stattdessen haue ich drei Ifs rein ("Spiel Starten", "Highscore", "Ende") und habe ein viel effizienteres Ergebnis.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit
 

funkheld

BeitragDo, Aug 11, 2016 14:46
Antworten mit Zitat
Benutzer-Profile anzeigen
maximilian gute Sache.

Ich suche gerade so etwas für meine Programme.
Kurz und schmerzfrei sind deine Buttons.

Danke.
Gruss

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group