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:

sGUI - eine kleine GUI Simulation
Gehe zu Seite Zurück  1, 2, 3 ... 5, 6, 7 ... 12, 13, 14  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Projektvorstellungen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 14.07.2012, 11:57    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 14.07.2012, 16:20    Titel: Antworten mit Zitat

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 grinsen

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 16.07.2012, 21:30    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 16.07.2012, 22:17    Titel: Antworten mit Zitat

Sehr interessant. Dank, Mutton ! Ich will das sehen. zwinkern
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 17.07.2012, 19:30    Titel: Antworten mit Zitat

Getan !

Eschecs 0.8.2

Ich liebe dein ClickMap. Vielen Dank Mutton ! happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 26.07.2012, 16:53    Titel: Antworten mit Zitat

Hallo Muttonhead und andere !

@Muttonhead

Ich habe ein sehr klein Problem. lächeln

Wenn ich schliesse ein MessageBox, es schriebt ein "1" auf den Bildschirm.

Ich finde nicht das schuldig Code. mit den Augen rollen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 26.07.2012, 21:02    Titel: Antworten mit Zitat

@Roland:
Print weglassen!!!! lächeln
die MessageBox ist eine Funktion. Der Returnwert ist die ID des Buttons,der gedrückt wurde.
Wenn du
Code:
PRINT MessageBox
aufrufst, siehst du naturlich das Ergebnis der Funktion

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 26.07.2012, 22:24    Titel: Antworten mit Zitat

Muttonhead hat Folgendes geschrieben:
die MessageBox ist eine Funktion. Der Returnwert ist die ID des Buttons,der gedrückt wurde.
Wenn du
Code:
PRINT MessageBox
aufrufst, siehst du naturlich das Ergebnis der Funktion


verlegen

Danke, Mutton !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 23.08.2012, 12:51    Titel: Antworten mit Zitat

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. lächeln

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



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 23.08.2012, 14:31    Titel: Antworten mit Zitat

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 lächeln
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 23.08.2012, 16:31    Titel: Antworten mit Zitat

Du kannst dir ja mal den Visual-WX-C-Designer ansehen. Mir geht es genau umgekehrt - ich mag die Dinger lieber hardcoden statt zusammenklicken. happy
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 24.08.2012, 17:11    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 02.10.2012, 06:18    Titel: Antworten mit Zitat

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 lächeln

Mutton
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 02.10.2012, 16:43    Titel: Antworten mit Zitat

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. lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 09.10.2012, 18:17    Titel: Antworten mit Zitat

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.... grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ThePuppetMaster



Anmeldungsdatum: 18.02.2007
Beiträge: 1837
Wohnort: [JN58JR]

BeitragVerfasst am: 09.10.2012, 18:33    Titel: Antworten mit Zitat

lol?? ... das war aber sarkasmus .. oder?


MfG
TPM
_________________
[ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Muttonhead



Anmeldungsdatum: 26.08.2008
Beiträge: 561
Wohnort: Jüterbog

BeitragVerfasst am: 09.10.2012, 21:08    Titel: Antworten mit Zitat

Ja sicher doch...

Möchte mal wissen was mich da geritten hat grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Roland Chastain



Anmeldungsdatum: 05.12.2011
Beiträge: 192
Wohnort: Frankreich

BeitragVerfasst am: 14.10.2012, 14:49    Titel: Antworten mit Zitat

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. verlegen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 14.10.2012, 15:18    Titel: Antworten mit Zitat

Hallo Roland!

Funktioniert bestens! lächeln

Zitat:
Wenn der Name "Umrechner" oder ein andere ist nicht richtig, bitte sage es mir

"Umrechner" ist gut.

Ich würde nur statt "Dezimale/Binäre/... Schrift" eher "Dezimale/Binäre/... Darstellung" schreiben.



Viele Grüße!
Sebastian
_________________

Der Markt regelt das! | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 14.10.2012, 15:36    Titel: Antworten mit Zitat

Deine Illustrationen sind immer wieder erheiternd Sebastian lächeln
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 -> Projektvorstellungen Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2, 3 ... 5, 6, 7 ... 12, 13, 14  Weiter
Seite 6 von 14

 
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