[B+] GUIExt Include

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

hazumu-kun

Betreff: [B+] GUIExt Include

BeitragSo, Jan 09, 2011 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Diese kleine Include Datei lößt einige Probleme die mir in meiner Zeit als Coder bisher über den Weg gelaufen sind.

Folgende Features werden BlitzPlus hinzugefügt:
Arrow Minimierenknopf einzeln zu Fenstern hinzufügen, ohne Maximieren oder Skalieren zu aktivieren
Arrow Bestehende Fenster über einen Funktionsaufruf zentrieren
Arrow Kleine Helfer wie:
Arrow Arrow Desktophandle in einer Globalen Variable
Arrow Arrow 2 Funktionen um die Dimensionen des Desktops schnell zu erfassen.
Arrow Einem Fenster ein Icon für die Taskleiste und die Titelleiste zuweisen.

Zur Verwendung von "*.decls" bemüht bitte die Forensuche oder nervt jeden außer mir Wink
Wenn ihr schon decls zur WinAPI habt, prüft zunächst ob ihr die benötigten Funktionen bereits unter anderem Namen definiert habt, doppelt hält nicht immer besser.

Hier der Beispielcode mit den Decls und den Funktionen.

BlitzBasic: [AUSKLAPPEN]
; ###### GUIExt Include
; #### Autor: Viken Emesh aka Hazumu-kun
; #### e-Mail: vikenemesh@live.de
; #### Homepage: http://vikenemesh.bplaced.net
; #### Beschreibung:
; #### Fügt BlitzPlus nützliche GUI Funktionen hinzu.
; ******

;Decls für die Funktionen (als winapi.decls in das userlib Verzeichnis speichern oder an vorhandene Dateien anhängen):
; .lib "user32.dll"
; api_GetForegroundWindow% () : "GetForegroundWindow"
; api_GetWindowLong% (hwnd%, nIndex%) : "GetWindowLongA"
; api_SetWindowLong% (hwnd%, nIndex%, dwNewLong%) : "SetWindowLongA"
; api_ShowWindow% (hwnd%, nCmdShow%) : "ShowWindow"
; api_GetActiveWindow% () : "GetActiveWindow"
; api_SetClassLong% (hwnd%, nIndex%, dwNewLong%) : "SetClassLongA"
;
; .lib "Shell32.dll"
; LoadIcon%(hWND%,File$,Index%) : "ExtractIconA"

; #### guiext.lib.bb Variablen/Konstanten
Global guiext_desktop= Desktop()

Const SW_HIDE= 0
Const SW_SHOWNORMAL= 1
Const GWL_STYLE= -16
; ****

; #### Testcode
Global win= CreateWindow ("Groupbox Text",50,50,400,300,guiext_desktop,33)

; Erst die GroupBox erstellen
Global gb= guiext_CreateGroupBox ("Gruppe",5,5,390,290,win)
; Dann das Panel
Global gb_pane= guiext_CreateGroupboxPanel (gb, win)
; NUR DEM PANEL werden Childs hinzugefügt
Global but= CreateButton ("Test",15,25,360,250,gb_pane,0)

guiext_AddMinimizeButton (win)
guiext_CenterWindow (win)

While Not KeyHit(1)
Select WaitEvent()
Case $803
End
Case $401
Notify "Funktioniert!"
End Select
Wend
; ****

; #### guiext.lib.bb Funktionen
Function guiext_CenterWindow (fwinhndl)
Local fwinh, fwinw, fdesk, fdeskw, fdeskh

fwinw= ClientWidth (fwinhndl)
fwinh= ClientHeight (fwinhndl)
fdesk= Desktop()
fdeskw= ClientWidth(fdesk)
fdeskh= ClientHeight(fdesk)
SetGadgetShape fwinhndl,(fdeskw-fwinw)/2,(fdeskh-fwinh)/2,fwinw,fwinh
End Function

Function guiext_DeskWidth ()
Return ClientWidth(guiext_desktop)
End Function

Function guiext_DeskHeight ()
Return ClientHeight(guiext_desktop)
End Function

Function guiext_AddMinimizeButton (window=0)
;Fügt einem Fenster den Minimieren-Knopf hinzu ohne den Maximieren-Knopf
;oder die Skalierung eines Fensters zu aktivieren.
Local window_hwnd
Local window_oldstyle

If window=0 Then
window_hwnd= api_GetForegroundWindow()
Else
window_hwnd= QueryObject(window,1)
EndIf

window_oldstyle= api_GetWindowLong (window_hwnd,(-16))

api_SetWindowLong (window_hwnd, -16, window_oldstyle Or $00020000)

If window Then
HideGadget window
ShowGadget window
Else
api_ShowWindow(window_hwnd,SW_HIDE)
api_ShowWindow(window_hwnd,SW_SHOWNORMAL)
EndIf
End Function

Function guiext_CreateGroupBox (name$, x, y, width, height, parent)
;Erstellt eine Groupbox
Local groupbox, hwnd

groupbox = CreateButton (name$, x, y, width, height, parent)
hwnd = QueryObject (groupbox, 1)
api_SetWindowLong (hwnd, GWL_STYLE, api_GetWindowLong(hwnd, GWL_STYLE)+7)

Return groupbox
End Function

Function guiext_CreateGroupboxPanel (groupbox, parent)
;Erstellt ein Panel für eine Groupbox um Childs hinzuzufügen
Return CreatePanel (GadgetX(groupbox),GadgetY(groupbox),GadgetWidth(groupbox),GadgetHeight(groupbox),parent)
End Function

Function guiext_setAppIcon (icon_file$,window=0)
;Läd eine 16x16 *.ico Datei und fügt das Icon in die Titelleiste des Fensters ein.
Local hwnd,icon

If window Then
hwnd= QueryObject (window,1)
Else
hwnd = api_GetActiveWindow()
EndIf
icon = LoadIcon(hwnd,icon_file$,0)
api_SetClassLong hwnd,-14,icon
End Function
; ****


Viel Spaß Wink
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ToeB

BeitragSo, Jan 09, 2011 17:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schön kommt mir grade recht Smile

Aber kann das sein das die Groupboxen manchmal komisch dargestellt werden ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jan 09, 2011 17:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Was meinst du mit komisch?
Normal passen die immer.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ToeB

BeitragSo, Jan 09, 2011 17:09
Antworten mit Zitat
Benutzer-Profile anzeigen
user posted image

So sollten die doch nicht aussehen oder ?

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jan 09, 2011 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei der Positionierung der Childobjekte muss man ein wenig basteln, das ist nunmal so. Smile
Als Grundlage für den Abstand nach oben nehm ich immer 15 Pixel, das haut gut hin.

Außerdem solltest du alle anderen Umrandungen weglassen.
Es schaut mir so aus als hättest du da zusätzlich noch umrandete Panels!
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ToeB

BeitragSo, Jan 09, 2011 17:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja um die Objekte geht es mir nicht..

Ich hab nur Das Window, 9 Buttons, 3 Groupboxen und 3 Listboxen...

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jan 09, 2011 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig doch mal den Code mit dem du die GUI aufbaust.
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

ToeB

BeitragSo, Jan 09, 2011 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Global ServerWindow = CreateWindow( "SimpleUDP2 - MasterServer", winPosX, winPosY, winSizeX, winSizeY, 0, 1 )
   guiext_CenterWindow( ServerWindow )
   guiext_AddMinimizeButton( ServerWindow )   

Global PlayerGrpBox = guiext_CreateGroupBox( "Player", 390, 14, 370, 190, ServerWindow )
Global ServerGrpBox = guiext_CreateGroupBox( "Server", 390, 220, 370, 197, ServerWindow )
Global AccountGrpBox = guiext_CreateGroupBox( "Accounts", 10, 20, 370, 390, ServerWindow )

   
Global PlayerList = CreateListBox( 405, 30, 200, 150, ServerWindow )
Global ServerList = CreateListBox( 405, 225, 200, 155, ServerWindow )
Global AccountList = CreateListBox( 25, 10, 200, 350, ServerWindow )

Global PlayerDelButton = CreateButton( "Delete", 615, 80, 130, 20, ServerWindow )
Global PlayerAddButton = CreateButton( "Add", 615, 30, 130, 20, ServerWindow )
Global PlayerChgButton = CreateButton( "Change", 615, 55, 130, 20, ServerWindow )
DisableGadget( PlayerDelButton )
DisableGadget( PlayerAddButton )
DisableGadget( PlayerChgButton )

Global ServerDelButton = CreateButton( "Delete", 615, 275, 130, 20, ServerWindow )
Global ServerAddButton = CreateButton( "Add", 615, 225, 130, 20, ServerWindow )
Global ServerChgButton = CreateButton( "Change", 615, 250, 130, 20, ServerWindow )
DisableGadget( ServerDelButton )
DisableGadget( ServerAddButton )
DisableGadget( ServerChgButton )

Global AccountDelButton = CreateButton( "Delete", 235, 80, 130, 20, ServerWindow )
Global AccountAddButton = CreateButton( "Add", 235, 30, 130, 20, ServerWindow )
Global AccountChgButton = CreateButton( "Change", 235, 55, 130, 20, ServerWindow )
DisableGadget( AccountDelButton )
DisableGadget( AccountChgButton )


mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jan 09, 2011 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde den ganzen Buttons und Listboxen als Parent das Panel der GroupBox zuweisen.
Guck dir den BeispielCode genauer an, das Panel zur Groupbox musst du auchnoch erstellen.

statt:
Code: [AUSKLAPPEN]
Global AccountDelButton = CreateButton( "Delete", 235, 80, 130, 20, ServerWindow )

das hier:
Code: [AUSKLAPPEN]
Global AccountDelButton = CreateButton( "Delete", 235, 80, 130, 20, AccountGrpBox_Panel )

Bitte dran denken die Koordinaten wieder anzupassen.

außerdem:
BlitzBasic: [AUSKLAPPEN]

Global PlayerGrpBox = guiext_CreateGroupBox( "Player", 390, 14, 370, 190, ServerWindow )
Global ServerGrpBox = guiext_CreateGroupBox( "Server", 390, 220, 370, 197, ServerWindow )
Global AccountGrpBox = guiext_CreateGroupBox( "Accounts", 10, 20, 370, 390, ServerWindow )

Global PlayerGrpBox_Panel= guiext_CreateGroupboxPanel (PlayerGrpBox, ServerWindow)
Global ServerGrpBox_Panel= guiext_CreateGroupboxPanel (ServerGrpBox, ServerWindow)
Global AccountGrpBox_Panel= guiext_CreateGroupboxPanel (AccountGrpBox, ServerWindow)


Mfg Hazumu

ToeB

BeitragSo, Jan 09, 2011 17:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah okay danke !

mfg ToeB
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

hazumu-kun

BeitragSo, Jan 09, 2011 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Kein Problem Smile
Warum kann es keine omnipotente Macht geben?
Weil diese omnipotente Macht in der Lage sein müsste, einen so schweren Stein zu schaffen, dass sie ihn nicht heben kann
-> nicht omnipotent

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group