Gui mit 2 Button und Textedit , Events und Timer.....

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

funkheld

Betreff: Gui mit 2 Button und Textedit , Events und Timer.....

BeitragFr, Aug 12, 2016 8:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, guten Tag.
Ich habe hier schon mehrere Guis angeschaut.
Die sind aber immer so geschrieben, das ich meine Fragen da nicht so raussuchen kann.

Ich möchte eine Gui anschauen zb mit mehreren Button und ein Textedit.
Ein Button schreibt etwas hinein un der der andere Button löscht es.

Ich komme mit den Events und Events nicht so recht klar und auch den Timer , der irgendwie eine Rolle da drin spielt, aber welche ?

Danke.

Gruss

Midimaster

BeitragFr, Aug 12, 2016 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ein MaxGui-Beispiel oder denktst Du an eine eigene GUI?
sowas?
BlitzMax: [AUSKLAPPEN]
SuperStrict

Import MaxGUI.Drivers

Global Window:TGadget=CreateWindow("TEST",500,100,350,350)
Global Button:Tgadget=CreateButton("A",40,40,100,60,Window)
Global Killer:Tgadget=CreateButton("KILL",200,40,100,60,Window)

Global Text:Tgadget=CreateTextField(40,120,100,200,Window)
CreateTimer 10

While WaitEvent()
Select EventID()
Case EVENT_TIMERTICK
Case EVENT_WINDOWCLOSE, EVENT_APPTERMINATE
End
Case EVENT_GADGETACTION
Select TGadget(EventSource())
Case Button
Print "BUTTON"
SetGadgetText Text, GadgetText(Text) + "A"
Case Killer
Print "Killer"
SetGadgetText Text, ""
Default
Print "das war wer anders"
End Select
Default
Print "EVENT= " + EventID()
End Select
Wend

Mathias-Kwiatkowski

BeitragFr, Aug 12, 2016 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
er meint schon die maxgui

also grundlegend gibt es zum thema maxgui sehr viel stoff selbst die eigene doku ist gut gelungen.

hier im forum wirst du 1000 prozent fündig

desweiteren schau mal im bmax example ordner da gibt es nahezu zu jedem modul auch ein bsp
dazu startest du mal maxide standart rechts im treeview klickst du auf modul sorce dann z.b. auf threads.mod dann auf doc und da haste bsp's.

oder soll ich dir gleich ein gui server code basteln und hier posten?^^
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

funkheld

BeitragSa, Aug 20, 2016 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie kann ich hier bitte einen Zeilenumbruch einfügen?

SetGadgetText Text, GadgetText(Text) + wert

Kann man mehrere Timer in der Gui anlegen?


Danke.
GRuss

BladeRunner

Moderator

BeitragSa, Aug 20, 2016 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
~VERSCHOBEN~
Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

CO2

ehemals "SirMO"

BeitragSo, Aug 21, 2016 1:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Warum möchtest du mehrere Timer anlegen?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Mathias-Kwiatkowski

BeitragSo, Aug 21, 2016 6:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hoffe das deine frage so richtig beantwortet ist

Zitat:
Wie kann ich hier bitte einen Zeilenumbruch einfügen?


ja kann man mit

Code: [AUSKLAPPEN]
"~n"


und das mit dem Timer geht ebenso, da haste glaub ich alle event handels... also eine komplette do loop schleife so wie ich sie mir als temp angelegt habe ... ( falls es nich deinen wünschen entspricht, überlese diese antwort einfach )

Code: [AUSKLAPPEN]
Local MyTimer:Int = MilliSecs()
Local ZweiterTimer:Int = Millisecs()
CreateTimer(60)
Repeat
   Local tmpGadget:Tgadget
   
   If MilliSecs() - MyTimer >= 1000 * 3 Then
         'Hier kann man nun alle 3 sekunden was ausüben
      MyTimer = MilliSecs()
   EndIf

    If MilliSecs() - ZweiterTimer >= 1000 * 5 Then
         'Hier kann man nun alle 5 sekunden was ausüben
        ZweiterTimer = MilliSecs()
   EndIf
   
   Select WaitEvent()
      Case EVENT_GADGETSELECT
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_GADGETACTION
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_TIMERTICK
     
      Case EVENT_GADGETPAINT
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEMOVE
           tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEUP
     
      Case EVENT_WINDOWCLOSE
         tmpGadget = TGadget(EventSource())
                 
      Case EVENT_APPTERMINATE
         End
         
      Case EVENT_MENUACTION
         tmpGadget = TGadget(EventSource())
     
   End Select
Forever
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

funkheld

BeitragSo, Aug 21, 2016 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte nach bestimmmten Timerintervallen bestimmte Aktionen ausführen.
Ich möchte aber die Gui damit nicht ausbremsen.

Dein Vorschlag ist eine gute Hilfe.

Danke.
GRuss
  • Zuletzt bearbeitet von funkheld am So, Aug 21, 2016 9:11, insgesamt 2-mal bearbeitet
 

funkheld

BeitragSo, Aug 21, 2016 9:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier kann ich jetzt den Zeilenumbruch machen : CreateTextArea
Hier funktioniert es nicht : CreateTextField , obwohl ich das Fenster gößer mache.

Danke.
Gruss

DAK

BeitragSo, Aug 21, 2016 11:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist der Hauptunterschied zwischen den Beiden: TextArea ist ein mehrzeiliges TextField. TextFields können üblicherweise nur eine Zeile.
Gewinner der 6. und der 68. BlitzCodeCompo
 

funkheld

BeitragSo, Aug 21, 2016 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Ahh.., das habe ich nicht rausgefunden.

Danke.
Gruss
 

funkheld

BeitragSo, Aug 21, 2016 11:41
Antworten mit Zitat
Benutzer-Profile anzeigen
was sagt dieses in der Case aus : tmpGadget = TGadget(EventSource()) ?

Ich habe es mal entfernt und es läuft trotzdem ab , was ich rein geschrieben habe.

Gruss

Mathias-Kwiatkowski

BeitragSo, Aug 21, 2016 11:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Ich wollte nach bestimmmten Timerintervallen bestimmte Aktionen ausführen.


genau das hab ich dir gegeben.... ohne zu warten^^ bzw ohne das prog zu bremsen

EDIT:
Als beweis kopier den kode, füg ihn in bm ein starte ihn einfach und warte 6 sekunden

Code: [AUSKLAPPEN]
Import maxgui.drivers

Global Window:TGadget = CreateWindow("Test", 0, 0, 320, 220, Desktop(), WINDOW_TITLEBAR)
Global Label1:TGadget = CreateLabel("", 5, 5, 100, 20, window)
Global Label2:TGadget = CreateLabel("", 5, 25, 100, 20, window)

Local MyTimer:Int = MilliSecs()
Local ZweiterTimer:Int = Millisecs()
CreateTimer(60)

Global Up1:Int, Up2:Int

Repeat
   Local tmpGadget:Tgadget
   
   If MilliSecs() - MyTimer >= 1000 * 3 Then
      Up1 = Up1 + 1
     SetGadgetText Label1, "Alle 3 Sek 1 dazu: " + Up1
      MyTimer = MilliSecs()
   EndIf

    If MilliSecs() - ZweiterTimer >= 1000 * 5 Then
        Up2 = Up2 + 1
        SetGadgetText Label2, "Alle 5 Sek 1 dazu: " + Up2
        ZweiterTimer = MilliSecs()
   EndIf
   
   Select WaitEvent()
      Case EVENT_GADGETSELECT
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_GADGETACTION
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_TIMERTICK
     
      Case EVENT_GADGETPAINT
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEDOWN
         tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEMOVE
           tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEUP
     
      Case EVENT_WINDOWCLOSE
        tmpGadget = TGadget(EventSource())
       
      If tmpGadget = Window Then End
           
      Case EVENT_APPTERMINATE
         End
         
      Case EVENT_MENUACTION
         tmpGadget = TGadget(EventSource())
     
   End Select
Forever
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
  • Zuletzt bearbeitet von Mathias-Kwiatkowski am So, Aug 21, 2016 12:03, insgesamt einmal bearbeitet
 

funkheld

BeitragSo, Aug 21, 2016 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles klar , danke.

Gruss

Mathias-Kwiatkowski

BeitragSo, Aug 21, 2016 12:43
Antworten mit Zitat
Benutzer-Profile anzeigen
und demnächst bitte vorher den code testen ob er das gewünschte ziel erreicht . den oben der code macht genau das ^^.... du hast dem direkt wiedersprochen. ohne es zu testen ^^.
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017

BladeRunner

Moderator

BeitragSo, Aug 21, 2016 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Funkheld hat Folgendes geschrieben:
Hier kann ich jetzt den Zeilenumbruch machen : CreateTextArea
Hier funktioniert es nicht : CreateTextField , obwohl ich das Fenster gößer mache.


Funkheld hat Folgendes geschrieben:
Ahh.., das habe ich nicht rausgefunden.


Dann würde ich Dir ans Herz legen die Hilfe zu lesen, denn da steht:

BlitzMax Hilfe hat Folgendes geschrieben:
A Text-Field allows the users to enter a single line of text.

[...]

Text Areas can disply and optionally allow the editing of multiple lines of text.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

funkheld

BeitragSo, Aug 21, 2016 15:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, den Code habe ich hier eingebaut und die Daten werden zeitgerecht ausgelesen, vorn vom Sensor und hinten vom Sensor und werden präzise als Linie im Grafikfenster abgebildet. Die vordere Entfernung "grün" auf 0-180 Grad und die hintere Entfernung "rot" von 180-360 Grad. Es wird also die Rundumentfernung von Gegenständen vom Roboter übermittelt zum Programm.

Hier sind 2 Bilder, 1 vom Roboter und 1 Bild von dem Steuerungsprogramm mit Auswertebild.
https://www.blitzforum.de/upload/uploads.php

Danke.
GRuss

Code: [AUSKLAPPEN]

Strict

Import MaxGUI.Drivers

Extern "Win32"
  Function CloseHandle:Int(Handle:Int)
   Function MapViewOfFile:int Ptr(hFileMappingObject: Int,dwDesiredAccess: Int, dwFileOffsetHigh:Int, dwFileOffsetLow:Int, dwNumberOfBytesToMap:Int)
   Function UnmapViewOfFile:Int(lpBaseAddress: Byte Ptr)
   Function CreateFileMappingA:Int(hFile: Int, lpFileMappingAttributes: Byte Ptr,flProtect:Int, dwMaximumSizeHigh:Int, dwMaximumSizeLow:Int, lpName$z)
   Function GetLastError:Int()
  Function WinExec(lpCmdLine$z, nCmdShow)
End Extern

global wert:int
global text1:string
global mem:TSharedMemory
global rot:float
global test:int
global test1:int
global testf:int
global zaehler:int

mem = New TSharedMemory
mem.Open("MyFileMapping",128)
delay(100)
WinExec Chr$(34) + "d:/blitzmax/esp_filemap_blitzmax.exe" + Chr$(34), 1
delay(100)

Const PAGE_READWRITE : Int=4
Const FILE_MAP_WRITE : Int=2

Type TSharedMemory
   Field _Handle : Int
   Field _Name   : String
   Field _Size   : Int
  Field _Owner  : Int
   Field _Data   : int Ptr

   Method Delete()
      Close
   End Method

   Method Open:Int(Name: String, Size: Int)
      Close()
         _Name = Name
       _Size = Size
       ' CreateFileMapping, when called with $FFFFFFFF For the hanlde value, creates a region of shared memory }
         _Handle = CreateFileMappingA($FFFFFFFF, Null, PAGE_READWRITE, 0,_Size,_Name)
       If _Handle = 0 Then Return False
        _Owner = GetLastError() = 0
       ' We still need To map a pointer To the handle of the shared memory region
        _Data= MapViewOfFile(_Handle, FILE_MAP_WRITE, 0, 0, _Size)
       If Not _Data
         Close
         Return False
      End If
      Return True
   End Method

   Method Close()
        If _Data
          UnmapViewOfFile(_Data);
         _Data=Null
      End If
      If _Handle
         CloseHandle(_Handle)
         _Handle=0
      End If       
   End Method
End Type

Global Window:TGadget=CreateWindow("esp-filemap",180,20,940,500)

Global vor:Tgadget=CreateButton("vor",90,15,40,25,Window)
Global links:Tgadget=CreateButton("links",10,40,40,25,Window)
Global hlinks:Tgadget=CreateButton("hli",50,40,40,25,Window)
Global mitte:Tgadget=CreateButton("mitte",90,40,40,25,Window)
Global hrechts:Tgadget=CreateButton("hre",130,40,40,25,Window)
Global rechts:Tgadget=CreateButton("rechts",170,40,40,25,Window)
Global zur:Tgadget=CreateButton("zur",90,65,40,25,Window)
Global ser0:Tgadget=CreateButton("ser0",90,100,40,25,Window)
Global ser1:Tgadget=CreateButton("ser1",130,100,40,25,Window)
Global sharp:Tgadget=CreateButton("sharp",90,125,40,25,Window)
Global v0:Tgadget=CreateButton("v0",190,100,40,25,Window)
Global v1:Tgadget=CreateButton("v1",190,125,40,25,Window)
Global v2:Tgadget=CreateButton("v2",190,150,40,25,Window)
Global killer:Tgadget=CreateButton("cls",377,20,40,25,Window)
Global killer1:Tgadget=CreateButton("cls",870,20,40,25,Window)


Global text_g:TGadget = CreateTextArea( 270, 20, 100,400, window )
global nmap_edit:Tgadget = CreateCanvas(460,20,400,400,window)
ActivateGadget(nmap_edit)

Local MyTimer:Int = MilliSecs()
Local ZweiterTimer:Int = Millisecs()

test1=1
CreateTimer(60)
Repeat
   Local tmpGadget:Tgadget
   
   If MilliSecs() - MyTimer >= 400 Then 
     MyTimer = MilliSecs()
     if test=1 and zaehler < 94
       zaehler=zaehler+1
       If mem._Owner
           wert = mem._Data[0]   
         text1=text1+wert+"~n"
         SetGadgetText(text_g,text1)
         rot=rot+1.9
       endif
       else
       test=0
       zaehler=0
     EndIf
   endif

   If MilliSecs() - ZweiterTimer >= 1000 Then       
     ZweiterTimer = MilliSecs()
   EndIf

   Select TGadget(EventSource())
      Case vor
         loadstring("http::192.168.2.102/?pin=vor")
     case links
        loadstring("http::192.168.2.102/?pin=links")
      case hlinks
       loadstring("http::192.168.2.102/?pin=hlinks")
     case mitte
       loadstring("http::192.168.2.102/?pin=mitte")
     case hrechts
       loadstring("http::192.168.2.102/?pin=hrechts")
     case rechts
       loadstring("http::192.168.2.102/?pin=rechts")
     case zur   
       loadstring("http::192.168.2.102/?pin=zur")
     case ser0
       loadstring("http::192.168.2.102/?pin=ser0")
     case ser1
       loadstring("http::192.168.2.102/?pin=ser1")
       rot=180
       test=1
       testf=1
     case sharp
       loadstring("http::192.168.2.102/?pin=sharp")
       rot=0
       test=1
       testf=2
     case v0
        loadstring("http::192.168.2.102/?pin=v0")
     case v1
       loadstring("http::192.168.2.102/?pin=v1")
     case v2
       loadstring("http::192.168.2.102/?pin=v2")
     Case killer
        SetGadgetText text_g, ""
       text1=""
     case killer1
        test1=1
   End Select
   
   Select WaitEvent()
      Case EVENT_GADGETSELECT
        tmpGadget = TGadget(EventSource())
     
      Case EVENT_GADGETACTION
        tmpGadget = TGadget(EventSource())

      Case EVENT_GADGETACTION
        tmpGadget = TGadget(EventSource())

      Case EVENT_TIMERTICK
        tmpGadget = TGadget(EventSource()) 
        redrawGadget (nmap_edit)
 
      Case EVENT_GADGETPAINT
         tmpGadget = TGadget(EventSource())
         SetGraphics (CanvasGraphics(nmap_edit))
         
         setclscolor 255,255,255
         if test1=1 then
           cls
           test1=0
         endif
         setorigin 200,200
         sethandle 0,0
         setrotation 0-rot
         if testf=1 then setcolor 255,0,0
         if testf=2 then setcolor 0,255,0
         drawline 0,0,0,wert
            Flip

      Case EVENT_MOUSEDOWN
        tmpGadget = TGadget(EventSource())
     
      Case EVENT_MOUSEMOVE
        tmpGadget = TGadget(EventSource())
 
      Case EVENT_MOUSEUP
        tmpGadget = TGadget(EventSource())
     
      Case EVENT_WINDOWCLOSE
        tmpGadget = TGadget(EventSource())
        end   

      Case EVENT_APPTERMINATE
        tmpGadget = TGadget(EventSource())
        End
         
      Case EVENT_MENUACTION
        tmpGadget = TGadget(EventSource())   
   End Select
Forever

Mathias-Kwiatkowski

BeitragSo, Aug 21, 2016 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt kapier ich erst mal was du mit roboter und mit deinem Sensor am kop hast...
ich fragte mich die ganze zeit was du überhaupt machst... ( roboter = <gedacht> an einem spiel ) wo man mitn robo rum laufen kann oder so ^^.

aber da gibts doch einfachere und bessere bzw schnellere dinge als bm oder?
Skype: Anarchie1984
http://projektworks.de/maxbase/
Icq - Erneuert am 21.08.2017
Yahoo - Erneuert am 21.08.2017
 

funkheld

BeitragSo, Aug 21, 2016 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Darum habe ich mit BlitzMax angefangen.
Und habe festgestellt es ist schneller. Ich brauche bewegende Grafik und das kann Blitzmax sehr schnell.

Natürlich wenn man die Befehle kennt von BlitzMax. Weil die eine andere Wortwahl für bestimmte eigentlich bekannte Durchführungen haben. Ich kenne Purebasic und XProfan beide habe in der Grafik schwierigkeiten und lassen schnell nach wenn man Bewegung reinbringen will in 2D mit Hindernis bzw Farberkennung usw.

BlitztMax gefällt mir jetzt am besten... zb sind die Grafikbefehle und andere Befehle nicht anders als wenn man ohne Gui programmiert.

Die Modulbauweise hat mich auch überzeugt in der Erweiterung...es ist damit eigentlich ein Spiel ohne Grenzen. Das man "C-Module" einsetzen kann oder einfach "ASM-Module"...gefällt mir.


Danke.
Gruss

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group