|
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 |
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 14.07.2012, 11:57 Titel: |
|
|
Hallo Muttonhead und andere !
Ich brauche ein Rat. Ich möchte ein Code schreiben für die Maus, wenn der Benutzer klickt auf das Brett. Ich muss das Feld zu wissen. Ist es möglich ein "Event" zu deklarieren ? Oder wie soll ich tun ?
Da ist mein Code :
Code: |
#include once "mdLanguage\mdLanguage.bi"
#include "sGUI\sGUI.bas"
#include once "sGUI\SimpleGadget.bas"
#include once "sGUI\StringGadget.bas"
#include once "sGUI\MessageBox.bas"
#include "Chess.bas"
loadCustomLanguage(default, "fr")
dim as EventHandle ptr event
dim as Gadget ptr textedit
dim as Gadget ptr button1, button2, button3, button4, button5, button6
declare function inspection(s as string) as string
declare sub fin(u as ubyte)
declare sub info(s as string)
screenres 560, 400, 16, ,4
#include "Colors.bas"
#include "Board.bas"
width 560\8, 400\16
InitGFX
windowtitle "ESCHECS"
event = CreateEventHandle
button1 = AddSimpleGadget(event, 400, 080, 120, 20, "1")
button2 = AddSimpleGadget(event, 400, 120, 120, 20, "2")
button3 = AddSimpleGadget(event, 400, 160, 120, 20, "3")
button4 = AddSimpleGadget(event, 400, 200, 120, 20, "4")
button5 = AddSimpleGadget(event, 400, 240, 120, 20, "5")
button6 = AddSimpleGadget(event, 400, 280, 120, 20, "6")
textedit = AddStringGadget(event, 438, 320, 5, "",,, 1)
info("hello")
GadgetOn(button1)
GadgetOn(button2)
GadgetOn(button3)
GadgetOn(button4)
GadgetOn(button5)
GadgetOn(button6)
GadgetOn(textedit)
initialiseJeu
initialiseImages
dessineTablier(40, 40)
dim sInput as string
dim monCoup as coup
do
'
event->xSleep(1)
'
if event->GADGETMESSAGE then
'
select case event->GADGETMESSAGE
'
case textedit
'
sInput = GetString(textedit)
'
SetString(textedit, "")
'
GadgetSleep(textedit)
'
sInput = LCase(sInput)
'
select case inspection(sInput)
'
case "legal"
'
strToCoup(sInput, monCoup)
'
mouvement(monCoup, courante)
'
dessineTablier(40, 40)
'
if possibles(courante) = "" then
'
fin(1)
'
else
'
mouvement(meilleurCoup, courante)
'
dessineTablier(40, 40)
'
if possibles(courante) = "" then fin(2)
'
end if
'
case "known"
'
select case sInput
'
case "exit"
'
fin(3)
'
case "play"
'
mouvement(meilleurCoup, courante)
'
dessineTablier(40, 40)
'
if possibles(courante) = "" then fin(2)
'
end select
'
case "illegal_or_unknown"
'
rem
'
end select
'
GadgetOn(textedit)
'
case button1
rem
case button2
rem
case button3
rem
case button4
rem
case button5
rem
case button6
rem
end select
'
end if
'
loop until event->EXITEVENT
destroyEventHandle (event)
end
function inspection(s as string) as string
'
if len(s) = 4 andalso instr(possibles(courante), s) > 0 then
'
return "legal"
'
else
'
if len(s) = 4 andalso (s = "exit") or (s = "play") then
'
return "known"
'
else
'
return "illegal_or_unknown"
'
end if
'
end if
'
end function
sub fin(u as ubyte)
'
dim as string msg, title
'
select case as const u
case 1
msg = getTranslation(default, "message1")
case 2
msg = getTranslation(default, "message2")
case 3
msg = getTranslation(default, "message3")
end select
'
title = getTranslation(default, "messagetitle")
'
print MessageBox(400 - 340 - 10, 400 - 94 - 10, msg, title, MBType_OK)
'
end
'
end sub
sub info(s as string)
'
FillA(400, 40, 120, fontheight + 4, white, 1)
'
draw string(400, 40 + 2), space( (15 - len(s)) \ 2 ) + s, black
'
end sub
|
|
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 14.07.2012, 16:20 Titel: |
|
|
ich hab noch ein Control was dir helfen könnte. das kann ich dir aber frühestens morgen abend zur Verfügung stellen.
jetzt zu Dr. House nach Berlin huuaaaa....
es muß Lupus sein
Mutton |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 16.07.2012, 21:30 Titel: |
|
|
@Roland:
ein unsichtbares Control.
Viellicht kannst du es nutzen?
Demo_ClickMap.bas:
Code: |
'Compileroption "-s console"
#include "sGUI\sGUI.bas"
#include "sGUI\ClickMapGadget.bas"
screen 16,32
InitGFX
dim as EventHandle ptr event
event=CreateEventHandle
dim as Gadget ptr BoardClickSensor
BoardClickSensor=AddClickMapGadget (event,10,10,"ClickMap.bmp")
GadgetOn BoardClickSensor
line(10,10)-(10+320,10+320),,b
'Console öffnen für output
dim as integer ff=freefile
open cons for output as #ff
dim as integer field_ID
type chessfield
fieldname as string
selected as integer
posx as integer
posy as integer
end type
dim as chessfield Board (1 to 64)
for k as integer= 0 to 7
Board(1 + k*8).fieldname="a" & str(k+1)
Board(2 + k*8).fieldname="b" & str(k+1)
Board(3 + k*8).fieldname="c" & str(k+1)
Board(4 + k*8).fieldname="d" & str(k+1)
Board(5 + k*8).fieldname="e" & str(k+1)
Board(6 + k*8).fieldname="f" & str(k+1)
Board(7 + k*8).fieldname="g" & str(k+1)
Board(8 + k*8).fieldname="h" & str(k+1)
next k
do
event->xSleep(1)
if event->GADGETMESSAGE then
select case event->GADGETMESSAGE
case BoardClickSensor
field_ID=GetClickMapColor(BoardClickSensor)
print #ff,Board(field_ID).fieldname
end select
end if
loop until event->EXITEVENT
close ff
DestroyEventHandle (event)
end
|
ClickMapGadget.bas:
Code: |
declare function AddClickMapGadget (event as EventHandle ptr,x as integer,y as integer,fm as string="") as Gadget ptr
declare function CMGActions(refgad as Gadget ptr,action as integer) as integer
declare sub DrawClickMapGadget (gad as Gadget ptr)
declare function GetClickMapColor (gad as gadget ptr) as integer
'Steuerungsvariablen
'Ctrl(15) angeklickte Farbnummer aus der MaskenBMP (ohne Transparenz)
function AddClickMapGadget (event as EventHandle ptr,x as integer,y as integer,fm as string="") as Gadget ptr
function=0
dim as Gadget ptr tmpgad
dim as integer w,h,ff=freefile
open fm for binary as #ff
get #ff, 19, w
get #ff, 23, h
close #ff
tmpgad=new Gadget
if tmpgad then
tmpgad->event=event
tmpgad->nextGadget=0
tmpgad->sel=0
tmpgad->act=0
tmpgad->posx=x
tmpgad->posy=y
tmpgad->gadw=w
tmpgad->gadh=h
tmpgad->texto=new TextObject
tmpgad->affiliation=1
tmpgad->caption=""
tmpgad->captionalt=""
if fm>"" then
tmpgad->Images(1)=imagecreate(w,h)
bload fm,tmpgad->Images(1)
end if
tmpgad->DoDraw =@DrawClickMapGadget
tmpgad->DoAction =@CMGActions
tmpgad->DoUpdate =@UpdateGadgetDummy'falls Veränderungen am TO ein Update erfordern, im Zeifel einfach den Dummy belassen oder die DoDraw Routine nehmen
'SaveBackGround(tmpgad)
event->ChainGadget (tmpgad)
function=tmpgad
end if
end function
function CMGActions(refgad as Gadget ptr,action as integer) as integer
function=0
select case action
case GADGET_HIT 'Control grad frisch gedrückt
case GADGET_HOLD 'Control wird gehalten, Maus über dem Control
case GADGET_HOLDOFF 'Control wird gehalten, Maus neben dem Control
case GADGET_RELEASE 'Control regulär losgelassen
refgad->Ctrl(0)=refgad->event->MOUSEX - refgad->posx
refgad->Ctrl(1)=refgad->event->MOUSEY - refgad->posy
refgad->Ctrl(15)=point(refgad->Ctrl(0),refgad->Ctrl(1),refgad->Images(1)) and &H00FFFFFF'angeklickte Farbe sichern
function=1
case GADGET_RELEASEOFF 'Control losgelassen, dabei ist Maus neben dem Control
case GADGET_KEYBOARD 'Keyboardauswertung
case GADGET_KEYBOARDOFF'Abbruch Keyboardauswertung
end select
end function
sub DrawClickMapGadget (gad as Gadget ptr)
end sub
function GetClickMapColor (gad as gadget ptr) as integer
function=gad->Ctrl(15)
end function
|
und eine "Clickmap"
www.muttonhead.homepage.t-online.de/data/ClickMap.bmp
Mutton |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 16.07.2012, 22:17 Titel: |
|
|
Sehr interessant. Dank, Mutton ! Ich will das sehen. |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 17.07.2012, 19:30 Titel: |
|
|
Getan !
Eschecs 0.8.2
Ich liebe dein ClickMap. Vielen Dank Mutton ! |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 26.07.2012, 16:53 Titel: |
|
|
Hallo Muttonhead und andere !
@Muttonhead
Ich habe ein sehr klein Problem.
Wenn ich schliesse ein MessageBox, es schriebt ein "1" auf den Bildschirm.
Ich finde nicht das schuldig Code. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 26.07.2012, 21:02 Titel: |
|
|
@Roland:
Print weglassen!!!!
die MessageBox ist eine Funktion. Der Returnwert ist die ID des Buttons,der gedrückt wurde.
Wenn du
aufrufst, siehst du naturlich das Ergebnis der Funktion
Mutton |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 26.07.2012, 22:24 Titel: |
|
|
Muttonhead hat Folgendes geschrieben: | die MessageBox ist eine Funktion. Der Returnwert ist die ID des Buttons,der gedrückt wurde.
Wenn du
aufrufst, siehst du naturlich das Ergebnis der Funktion |
Danke, Mutton ! |
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 23.08.2012, 12:51 Titel: |
|
|
Gibt es noch/wieder eine Referenz? Die fand ich sehr gut, kann jetzt aber keine finden. Allerdings sind die Beispiele so schön minimal, dass man sich die jeweilige Bedienung, sehr gut herauslesen kann.
In der MultiLineEditBox ist ein Fehler in Zeile 102 (Linux-only):
Code: | refgad->texto->KeyDelete(refgad->gad(0)) |
Wenn ich die Klammer hinter KeyDelete lösche, funktioniert es scheinbar.
Die Messagebox habe ich mir auch schnell mal angesehen. Gefällt mir (wie der ganze Rest) sehr gut; diese könnte man aber möglicherweise verschiebbar gestalten. Wäre jedenfalls ein netter Zusatz. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Eternal_pain
Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 23.08.2012, 14:31 Titel: |
|
|
Finde die GUI (eigentlich) ganz gut, sehr umfangreich, relativ einfach gehalten und zu verstehen...
Leider kann man damit (jedenfalls ohne framework) kein richtiges
Fenstersystem 'basteln' (Fenster, Childs...) wo diese einfach zu verschieben sind ect.. und schätze dieses einzubauen dürfte einiges an Arbeit bedeuten
(ist auch ziemlich umständlich das ganze)
Dennoch find ichs für kleine Menüs sehr praktisch, allerdings bin ich Faul und würde mir ein GUI-Editor wünschen, wo man sich quick'n'dirty ein Menü schnell zusammenklickt und dann den Sourcecode dafür einfach in sein projekt einbindet (copy&paste) wie es sowas auch für AutoIt gibt _________________
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4594 Wohnort: ~/
|
Verfasst am: 23.08.2012, 16:31 Titel: |
|
|
Du kannst dir ja mal den Visual-WX-C-Designer ansehen. Mir geht es genau umgekehrt - ich mag die Dinger lieber hardcoden statt zusammenklicken. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 24.08.2012, 17:11 Titel: |
|
|
grad zurück aus meinem Kurzurlaub... Referenz und ein paar Fixes werd ich demnächst nachreichen!! Ist in Arbeit.
Hmmmm... ein Windowsystem war nie geplant...
Ein paar rudimente Versuche diesbezüglich liegen hier allerdings noch herum.Bin dann mit mir übereingekommen, ohne Threads und wildes Mutexen ist das alles nicht mehr vernünftig zu realisieren.
Hab ich mich noch nie so richtig herangewagt.
Bis jetzt kommt sGUI ja immernoch ohne das Zeugs aus
Na mal sehen.
ps:
@nemored:
Hast recht, ist nen Fehler! hier wird direkt eine Routine aus dem TextObjekt aufgerufen, und diese ist parameterfrei.
Code: | refgad->texto->KeyDelete
|
sollte genügen
Mutton |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 02.10.2012, 06:18 Titel: |
|
|
sGUI v.0.8.3.8
Changes und Bugfixes (im wesentlichen letzteres):
*StringGadget: um "HoldFocus" erweitert
*MLEBox:schwerer Fehler in der Update-Routine behoben, dieser konnte zum Absturz des Programmes führen
*MLEBoX:Fehler in der DELETE(Linux) Funktion behoben(mit Dank an nemored)
*FileRequester: Pfad Label hatte falschen Text, behoben. allgemeine Phrasen werden jetzt benutzt
*MessageBox:allgemeine Phrasen werden jetzt benutzt
*Phrases.bi hinzugefügt, enthält eine kleine Sammlung allgemeine Phrasen, die sich leichter lokalisieren lassen.
werden vom FileRequester und von der MessageBox benutzt. Vielleicht werd ich aber auch MODs mdLanguage einbinden.
*endlich wieder eine kleine Referenz als PDF beigefügt
Mutton |
|
Nach oben |
|
|
MOD Fleißiger Referenzredakteur
Anmeldungsdatum: 10.09.2007 Beiträge: 1003
|
Verfasst am: 02.10.2012, 16:43 Titel: |
|
|
Der Hauptzweck von mdLanguage war es, Übersetzungen anzubieten, aber eigentlich kann man es für alles Mögliche verwenden, z. B. auch einfach als Speicherformat für Einstellungen etc., also tob dich nur aus. |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 09.10.2012, 18:17 Titel: |
|
|
ui, grad diese Perle hier im Code gefunden....
Code: | function FindDot(s as string) as integer
function=0
if len(s)>0 then
for i as integer=len(s) to 1 step -1
if mid(s,i,1)="." then function=len(s)-i+1
next i
end if
end function |
ahhhhh.... |
|
Nach oben |
|
|
ThePuppetMaster
Anmeldungsdatum: 18.02.2007 Beiträge: 1837 Wohnort: [JN58JR]
|
Verfasst am: 09.10.2012, 18:33 Titel: |
|
|
lol?? ... das war aber sarkasmus .. oder?
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
|
Muttonhead
Anmeldungsdatum: 26.08.2008 Beiträge: 562 Wohnort: Jüterbog
|
Verfasst am: 09.10.2012, 21:08 Titel: |
|
|
Ja sicher doch...
Möchte mal wissen was mich da geritten hat |
|
Nach oben |
|
|
Roland Chastain
Anmeldungsdatum: 05.12.2011 Beiträge: 192 Wohnort: Frankreich
|
Verfasst am: 14.10.2012, 14:49 Titel: |
|
|
Hallo Freunde !
Ich habe mein erst sGui Projekt bearbeiten. Es ist ein einfach Umrechner.
Es benutzet also mdLanguage. Bitte schreibe "de" in Option.ini Datei.
Wenn der Name "Umrechner" oder ein andere ist nicht richtig, bitte sage es mir. |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 14.10.2012, 15:36 Titel: |
|
|
Deine Illustrationen sind immer wieder erheiternd Sebastian |
|
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.
|
|