MaxGui Probleme...

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

CO2

ehemals "SirMO"

Betreff: MaxGui Probleme...

BeitragFr, Dez 24, 2010 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

Ich bin gerade ein wenig mit der MaxGui am rumwerkeln, mal die Grundfunktionen ausprobieren... Dabei ist bisher folgendes Herausgekommen:

BlitzMax: [AUSKLAPPEN]
'Importieren der MaxGUI
Import maxgui.cocoamaxgui
Import maxgui.drivers
Import maxgui.fltkmaxgui
Import maxgui.localization
Import maxgui.maxgui
Import maxgui.proxygadgets
Import maxgui.win32maxguiex
'------------------------

Type File
Field ID:Int
Field Name:String
Field Endund:String
End Type

Global packagedatennow:Int = 5 'Anzahl der jetzigen Files
Global packagedatennow2:Int = packagedatennow 'Variable um die bereits aufgeschriebenen dateien zu entdecken
Global packagedatenstd:Int = 0 'Anzahl der Files die vorher im Package waren

Global mainwindow:TGadget = CreateWindow(".SDPak Builder", 200, 200, 500, 500, Null, WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_MENU|WINDOW_TOOL|WINDOW_ACCEPTFILES|WINDOW_STATUS) 'Ein Fenster machen
Global filelist:TGadget = CreateListBox(0, 0, ClientWidth(mainwindow), ClientHeight(mainwindow), mainwindow) 'eine Listbox im Fenster erstellen

Global FPS:Int = 60
Global FPSTimer:TTimer = CreateTimer(FPS)

SetStatusText mainwindow, "Enthaltene Dateien: " + packagedatennow + " / " + packagedatenstd + ""

'HAUPTSCHLEIFE
Repeat
WaitTimer(FPSTimer)

'Das hier kommt in die LoadFile() - Funktion!
If(packagedatennow2 > 0) Then
For Local x:Int = 1 To packagedatennow
AddGadgetItem filelist, "[Dateiname](" + x + ". Datei im Package)", 0, -1, "[Dateiname].[Dateiendung]"
packagedatennow2 = packagedatennow2 - 1
Next
EndIf

Select EventID()
Case EVENT_WINDOWCLOSE
Exit
Case EVENT_GADGETACTION
Local fileinfo:String = GadgetItemText(filelist, SelectedGadgetItem(filelist))
SetStatusText mainwindow, "[Dateiname].[Dateiendung] ([Dateityp])"
End Select
WaitEvent()
Forever
End

'FUNKTIONEN
Function LoadFile(filename:String)
Local file = OpenFile(filename)
If file = 0 Then
RuntimeError "Die Datei " + filename + " konnte nicht gefunden werden!"
EndIf

'Hier kommt noch das laden rein

End Function

Function SaveFile(filename:String)
Local file = OpenFile(filename + ".sdpak")
If file = 0 Then
file = WriteFile(filename + ".sdpak")
EndIf

'Hier kommt das speichern rein

End Function


Funktioniert ja alles einwandfrei... Aber in der For/Next schleife in der Repeat/Forever schleife sind bisher nur "Beispiel" dateien angegeben. Was muss ich machen, damit dort auch richtige Dateinamen stehen (Wenn der User z.b.: eine datei auswählt, das dort dann ihr name angegeben wird), wie man sieht, habe ich es schon mit types probiert, da scheitere ich dann aber an der ID abfrage, da es den Each befehl wie in BB nicht mehr gibt (er wird zumindest nicht gelb geschrieben). Und noch ein paar fragen:

1. Wie mache ich, das wenn keine Datei ausgewählt ist, das dann wieder der Text "Enthaltene Dateien" angezeigt wird?

2. Ich habe oben bei "CreateWindow" angegeben, das Drag'and'Drop aktiviert ist (WINDOW_ACCEPTFILES), nur wie kann ich daten die so eingefügt worden sind anzeigen lassen?

Brauche hilfe bei dem Problem, sowie bei dem Problem mit den Types.

danke schonmal im vorraus
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
  • Zuletzt bearbeitet von CO2 am Di, Jan 04, 2011 15:11, insgesamt 2-mal bearbeitet

mpmxyz

BeitragFr, Dez 24, 2010 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu den Types:
Es gibt keine automatisch geführten Objektlisten.
Die musst du selbst erstellen.
Dazu mal dieses Beispiel:
BlitzMax: [AUSKLAPPEN]
Type TMeinObjekt
Global list:TList=New TList
Field _link:TLink 'direkte Referenz zu einem Listeneintrag
Method New() 'wird beim Erstellen des Objektes aufgerufen
_link=ListAddLast(list,Self)
EndMethod
Method Remove() 'zum Entfernen des Objektes aus der Liste
_link.Remove()
EndMethod
EndType

For Local obj:TMeinObjekt=EachIn(TMeinObjekt.liste)
'irgendetwas mit jedem Listeneintrag machen
Next

Hier brauchst du aber so eine Liste nicht.
Hänge einfach an jeden Listbox-Eintrag ein entsprechendes Objekt an! ("extra"-Parameter)
Über "EventExtra" kommst du wieder daran:
BlitzMax: [AUSKLAPPEN]
Local datei:File=File(EventExtra())

Mit "LoadDir" bekommst du ein String-Array mit allen Dateien und Ordnern im angegebenen Ordner:
BlitzMax: [AUSKLAPPEN]
Local files:String[]=LoadDir("dir")
For Local file:String=EachIn(files)
If FileType("dir/"+file)=FILETYPE_FILE ...'mache etwas
Next

mfG
mpmxyz
PS: Schaue dir die Dokumentation zu BRL.FileSystem an!
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

CO2

ehemals "SirMO"

BeitragFr, Dez 24, 2010 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Hänge einfach an jeden Listbox-Eintrag ein entsprechendes Objekt an! ("extra"-Parameter)
Über "EventExtra" kommst du wieder daran


Wie meinst du das? Also ich behalte meinen File - Type und wie hänge ich was daran an?

danke für die antwort,
mfG,
CO2
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

das wurgel

BeitragFr, Dez 24, 2010 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
AddGadgetItem besitzt einen Parameter, in dem man ein Objekt angeben kann. Falls irgendein Event im zusammenhang mit einem der Einträge geschieht, lässt sich per genannter Funktion das Objekt herausfinden, welches an den Eintrag drangehängt wurde - und schon hast du wieder deine Datei.
1 ist ungefähr 3
 

CO2

ehemals "SirMO"

BeitragFr, Dez 24, 2010 14:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, dankeschön, ich werds mal probieren.

Post Scriptum: Frohe Weihnachten an alle

mfG,
CO2
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
 

CO2

ehemals "SirMO"

BeitragDi, Jan 04, 2011 15:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok, das mit der Listbox ist jetzt Schnee von gestern Very Happy

(Sry wegen Doppelpost)

Ich möchte jetzt sowas wie einen Text-Editor schreiben. Dabei gibts ein paar Probleme, aber ich sende jetzt erst den Code:
BlitzMax: [AUSKLAPPEN]
Import maxgui.cocoamaxgui
Import maxgui.drivers
Import maxgui.fltkmaxgui
Import maxgui.localization
Import maxgui.maxgui
Import maxgui.proxygadgets
Import maxgui.win32maxguiex

'STANDARTFILE##############################################################
Global CurrentFile:String = "STD.zms"
Global CurrentFileSize
If CurrentFile = "STD.zms" Then
CurrentFileSize = 0
Else
CurrentFileSize = FileSize(CurrentFile)
EndIf
'##########################################################################
Global mainwindow:TGadget = CreateWindow("ZMS Editor", 100, 100, 500, 500, WINDOW_MENU | WINDOW_STATUS)
'MENUBAR###################################################################
Global filemenu:TGadget = CreateMenu("Datei", 0, WindowMenu(mainwindow))
CreateMenu "Speichern", 101, filemenu
CreateMenu "Öffnen", 102, filemenu
CreateMenu "Beenden", 103, filemenu

Global helpmenu:TGadget = CreateMenu("Hilfe", 0, WindowMenu(mainwindow))
CreateMenu "Über...", 201, helpmenu
CreateMenu "Befehle", 202, helpmenu

UpdateWindowMenu mainwindow
'##########################################################################
'TEXTFELD###################################################################
Global mainwindowtext:TGadget = CreateTextArea(0, 0, 500, 500, mainwindow)

AddTextAreaText(mainwindowtext, "MinimapIconPos~n")
AddTextAreaText(mainwindowtext, "3500~n")
AddTextAreaText(mainwindowtext, "3000~n")
AddTextAreaText(mainwindowtext, "MissionText~n")
AddTextAreaText(mainwindowtext, "Boss~n")
AddTextAreaText(mainwindowtext, "Töte den Zombie!~n")
AddTextAreaText(mainwindowtext, "AddZombie~n")
AddTextAreaText(mainwindowtext, "zombie1~n")
AddTextAreaText(mainwindowtext, "5000~n")
AddTextAreaText(mainwindowtext, "5000~n")
AddTextAreaText(mainwindowtext, "MissionWon~n")
AddTextAreaText(mainwindowtext, "AllAddedZombiesDead~n")
AddTextAreaText(mainwindowtext, "MissionLost~n")
AddTextAreaText(mainwindowtext, "PlayerDead~n")
AddTextAreaText(mainwindowtext, "EndOfScript")
'###########################################################################
'HAUPTSCHLEIFE##############################################################
Repeat
SetStatusText mainwindow, "Momentan geöffnete Datei: '" + CurrentFile + "' (Größe: " + CurrentFileSize + " Bytes)"
WaitEvent()
Select EventID()
Case EVENT_WINDOWCLOSE
Exit
Case EVENT_MOUSEDOWN
If EventSource() = mainwindowtext And EventData() = 2 Then
PopupWindowMenu mainwindow, helpmenu
EndIf
Case EVENT_MENUACTION
Select EventData()
Case 101
Notify "Speichern geht noch nicht!"
Case 102
Notify "Öffnen auch nicht!"
Case 103
Notify "Das geht!"
Exit
Case 201
Notify "v 1.0 des ZombieMissionScriptEditors. ~n (C) by CO2 Software"
Case 202
Notify "Hauptbefehle:~n"
Notify "Nebenbefehle:~n"
End Select
End Select
Forever

End
'###########################################################################


So. Folgende Probleme habe ich:
1.) Ich möchte Zeilenzahlen am rand haben. Wie macht man das?
2.) Es soll Syntax Highlighting geben. Dazu habe ich mir überlegt, dass sobald [ENTER] gedrückt wird, die geschriebene Zeile geprüft wird und je nachdem was da steht eben gehighlighted wird. Aber wie kann man das kontrollieren?
3.) Wenn man auf speichern drückt, dann soll - wie in windows - ein weiteres fenster eingeblendet werden, in dem man dann den Speicherort auswählen kann. Wenn ich aber ein zweites fenster via CreateWindow() mache, wird das doch direkt angezeigt. kann man ein fenster auch verstecken.
4.) Ich habe oben by CreateWindow() nicht angegeben, das das Fenster vergrößert oder verkleinert werden kann. Wenn ich den Code aber ausführe, dann kann man es eben doch vergrößern/verkleinern.

So, das waren erstmal die fragen. Danke schonmal im vorraus
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

mpmxyz

BeitragDi, Jan 04, 2011 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Da fällt mir keine Möglichkeit mit der MaxGUI ein.
2. Da könnte dir das EVENT_GADGETACTION-Event helfen. (+die Befehle, die es extra für die TextArea gibt)
3. Ein Fenster verstecken: "HideGadget" Für dein Problem solltest du aber eher "RequestFile" nutzen.
4. Du hast einen Parameter vergessen. Nutze Strict oder SuperStrict, um so etwas zu vermeiden. (Am Parent-Parameter hast du eine Zahl angegeben.)
Richtig ist dieser Code zum Erstellen des Fensters:
BlitzMax: [AUSKLAPPEN]
Global mainwindow:TGadget = CreateWindow("ZMS Editor", 100, 100, 500, 500,Null, WINDOW_TITLEBAR | WINDOW_MENU | WINDOW_STATUS )

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer
 

CO2

ehemals "SirMO"

BeitragDi, Jan 04, 2011 16:13
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Schade... Sad Naja, kann man nichts machen
2. Ich werds mal ausprobiern
3. Das auch Smile
4. Ahh, ok

Besten dank für die Antwort!
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
 

jsp

BeitragDi, Jan 04, 2011 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Müsste man selbst schreiben, keine einfache Lösung
2. Schau dir ausserdem mal den FormatTextAreaText( .. ) Befehl an.
3. Wenn ein Fenster nicht direkt angezeigt werden soll kann man auch die Option WINDOW_HIDDEN beim CreateWindow() benutzen. Dann wie gewohnt mit ShowGadget und HideGadget anzeigen...
Aber wie bereits gesagt ist RequestFile wohl eher was du suchst.
4. Wenn du vergrößern und verkleinern unterdrücken willst kannst du:
SetMinWindowSize( mainwindow:TGadget,500,500 )
SetMaxWindowSize( mainwindow:TGadget,500,500 )
benutzen.
Logic Gui Professional a Gui Designer for MaxGui

ComNik

BeitragDi, Jan 04, 2011 17:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Zu 2.) Vllt hilft dir auch SetGadgetFilter() zusammen mit einer selbstgeschriebenen Filterfunktion weiter.
Die kriegt als Parameter ein Event (wobei die Quelle automatisch das betreffende Gadget ist), das ist meines wissens nach die einfachste Möglichkeit Eingaben zu kontrollieren/verarbeiten bevor sie bei der TextArea ankommen.
WIP: Vorx.Engine

blackgecko

BeitragDi, Jan 04, 2011 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die Maxgui zu importieren brauchst du übrigens nichts weiter zu schreiben als
BlitzMax: [AUSKLAPPEN]
Import maxgui.drivers

Der Rest wird von diesem Code selbst eingebunden (und zwar sinnvoll, nur das was man im jeweiligen Betriebssystem braucht).
Zu 1: Vlt kannst du ganz dicht links daneben eine Listbox hinsetzen, in der Zahlen stehen. Allerdings müsste man dann selbst dafür sorgen, dass die gescrollt wird usw...

Hummelpups

BeitragMi, Jan 05, 2011 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
1.) Kann man in einem Canvas neben der Textarea anzeigen lassen.



Na endlich sieht man mal wieder ein neues projekt von dir. Is ja auch schon wieder 2 Tage her
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus
 

CO2

ehemals "SirMO"

BeitragSo, Jan 09, 2011 0:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@ blackgecko:
thx für die hilfe, werds ausprobieren!

@ Hummelpups:
jo, danke

PS.: Haha wie lustig... Rolling Eyes - Naja, ich sag da nichts mehr zu, hab keinen bock mehr, auf solche kommentare zu antworten...
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

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group