Seite 1 von 2

Meine GUI

Verfasst: 11.03.2006 15:19
von winduff
Hallo!

Ich arbeite schon länger an nem etwas größeren Projekt, welches ca. 30 verschiedene "Fenster" im Fenster hat... Dumm gesagt ;-)

Ich meine ich habe ein Fenster, nähmlich bsp. hauptfenster()

Darin sind unglaublich viele gadgets, die ich je nachdem was benutzt werden soll mit hilfe von hidegadget anzeige oder nicht. Somit umgehe ich das andauernde öffnen neuer fenster usw., wie jeder von uns macht ^^

Nunja, ein eigentliches Problem habe ich nicht: nur irgendwie habe ich das gefühl ich mache was falsch.

wenn ich beispielweise neue gadgets programmieren will, muss ich die X bzw Y achse rausfinden, an 5 verschiedenen stellen alles in ordnung rücken, und so weiter... ich hätte mir das modularer vorgestellt....

Ich weis nicht genau wie ich das beschreiben soll aber vielleicht versteht einer mein Problem.

Gibt es also einen weg das anders zu lösen bzw einen GUI designer zu benutzen? Weil die designer sind nur für das erste fenster gut, weil man kann ja keinen geschreibenen code in den designer laden.

Ich habe bisher nur kleine programme mit maximal 2-5 oberflächen programmiert, aber hier .... naja ziemlich groß :-P Ich verliere daher die übersicht....

Ich danke im vorraus für eure Hilfe!

Liebe Grüße
Chris

Verfasst: 11.03.2006 19:16
von FGK
@winduff

Hier versuchs mal mit Resourcen Dialogen die du per ResourcenEditor
einbindest. Lies dir dazu diesen Thread mal durch:

http://www.purebasic.fr/german/viewtopi ... =resourcen

Gruß

FGK

Verfasst: 11.03.2006 19:38
von winduff
Hi

Danke für deinen Tip!

Schaut super aus, und ich freue mich wenn ichs einigermaßen drauf habe/hätte ;-)

Nur ein kleines problem, die ganzen beispiele usw sind offline, warscheinlich veraltet. Den Resourceeditor konnte ich mir von google schnappen, der fehlt also nicht ;-)

Könntest du mir vielleicht ein paar Beispiele hochladen?

In dem Thread fragst du nach Webspace... kann ich dir gerne geben ;-)

Grüße
CHris

Verfasst: 11.03.2006 20:26
von winduff
also habe mir den editor nen bisshen angeschaut, simple sachen bekomme ich schon hin aber ..... so funktionen wie beispielweise information aus einer stringgadget usw holen geht ja nicht, ist doch irgendwie ne art andere programmierebene...

Gibt es dazu tutorials und handbücher?

Lg
Chris

Verfasst: 11.03.2006 22:25
von technicorn
Hallo,

ohne genau zu wissen wie Dein Programm aussieht, lässt sich schwer ein Tip geben.

Falls Du mit "modular" meinst, die Gadget ordnen sich von alleine an sieht es schlecht aus.
Sowas ist eher ein Java Sache.

Aber Du kanst Dir das leben vielleicht mit einem ContainerGadget einfacher machen.

Alle Gadgets die zusammengehören in einen Container packen.
Innerhalb des Containers sind alle Gadgets dann an der 0,0 Ecke des Containers, und nicht am Fenster ausgerichtet.
Dann köntest Du auch mit HideGadget den ganzen Container verstecken,
und damit auch alle Gadgets darin.

Ich hoffe das hilft

Gruß
technicorn

Verfasst: 11.03.2006 23:05
von technicorn
Hier ein kleines Beispielprogramm:

Code: Alles auswählen

wnum = OpenWindow(#PB_Any, 0, 0, 600, 500, "ContainerGadgetTest")
CreateGadgetList(WindowID(wnum))

cgnum = ContainerGadget(#PB_Any, 8, 8, 400, 400)
cgbt1num = ButtonGadget(#PB_Any, 8, 8, 120, 32, "Button1 in Container1")
CloseGadgetList()

Repeat
  ev = WaitWindowEvent(100)
  If ev=#PB_Event_CloseWindow: Break: EndIf
  If (ElapsedMilliseconds() - tstart) > 1000
    tstart = ElapsedMilliseconds()
    hide = ~hide
    HideGadget(cgnum, hide)
  EndIf
ForEver

Verfasst: 12.03.2006 00:01
von winduff
Hi technicorn,

Ich habe mir das mal angeschaut. Vielen Dank dazu und für das Beispiel.

Die Idee hatte ich auch, ich werde wohl nicht drum rumkommen die hälfte neu zu schreiben ^^ Aber gut, ich denke so wärs am einfachsten...

Die Resourcen, das ist eine SUPER sache nur sehr kompliziert und ich frage mich ob wirklcih alles damit möglich ist (bzgl hintergrundbild usw) naja mal sehn...

Leider kann ich das Programm nicht zeigen (veröffentlichen) da ich sonst probleme mit meiner Partnerseite bekommen würde... Informationen dazu gibt es jedoch unter www.pirahnastudio.de unter Programme. Wenn du selber einblick in das Programm selber haben willst (ggf quelltext), schick mir kurz deine ICQ/MSN und oder eMail adresse per PN, dann schick ich dir den.

MfG
Chris

Verfasst: 12.03.2006 11:52
von FGK
@winduff

Hab dir hier mal ein kleines Beispiel erstellt damit die Funktion klarer wird.

Speicher das folgende als Datei ab (z.b. Demo.rc)

Code: Alles auswählen

#define IDD_DLG1 1000
#define IDC_BTN1 1001
#define IDC_GRP1 1002
#define IDC_RBN1 1003
#define IDC_RBN 1004
#define IDC_RBN 1005
IDD_DLG1 DIALOGEX 6,6,194,106
CAPTION "Resourcen Dialog"
FONT 8,"MS Sans Serif"
STYLE 0x10CC0000
EXSTYLE 0x00000000
BEGIN
  CONTROL "OK",IDC_BTN1,"Button",0x50010000,130,75,60,22,0x00000000
  CONTROL "Options:",IDC_GRP1,"Button",0x50000007,10,5,110,91,0x00000000
  CONTROL "IDC_RBN",IDC_RBN1,"Button",0x50010009,22,24,92,11,0x00000000
  CONTROL "IDC_RBN",IDC_RBN,"Button",0x50010009,22,40,92,11,0x00000000
  CONTROL "IDC_RBN",IDC_RBN,"Button",0x50010009,22,57,92,11,0x00000000
END
Das ist nun der PB Quellcode zum Aufruf der Resource

Code: Alles auswählen

; Simples Beispiel für eine AboutBox als Resource
; erstellt von TS-Soft

;/############################################################################
Procedure GetResDialog(DialogId, *DialogProcedure)
  ProcedureReturn DialogBoxParam_(GetModuleHandle_(0), DialogId, 0, *DialogProcedure, 0)
EndProcedure
;/############################################################################


#IDD_DLG1               = 1000
#IDC_BTN1               = 1001
#IDC_GRP1               = 1002
#IDC_RBN1               = 1003
#IDC_RBN2               = 1004
#IDC_RBN3               = 1005

; Beispiel einer DialogProcedure
Procedure DlgProc(hDlg, uMsg, wParam, lParam)
  Select uMsg
    Case #WM_INITDIALOG
        MessageBeep_(#MB_ICONINFORMATION)
    Case #WM_CLOSE
      EndDialog_(hDlg, 0)
    Case #WM_COMMAND
      id = wParam & $FFFF
      Select id
        Case #IDC_BTN1
          EndDialog_(hDlg, #IDC_BTN1) ; 1002 als Rückgabewert bei okay
      EndSelect
  EndSelect
EndProcedure

; Aufruf der DialogResource
Select GetResDialog(#IDD_DLG1, @DlgProc())
  Case 0
    MessageRequester("Dialog-Test", "Dialog wurde geschlossen")
  Case #IDC_BTN1
    MessageRequester("Dialog-Test", "Benutzer hat Okay gedrückt zum beenden")
EndSelect 

Die zuvor gespeicherte Resourcen-Datei in Purebasic unter dem Menüpunkt Compiler/Compiler Options im Karteireiter "Resources"
auswählen und mit Add hinzügen! Dann wird dein Dialog in der Exe mit
eincompiliert.
[EDIT]
So sollte das Ergebnis aussehen:

Bild

Gruß FGK

Verfasst: 12.03.2006 12:26
von technicorn
Hallo FGK,

zZ. bin ich nur mit Windos ingange, gibt es solche Resourcen Dateien auch
unter Linux/Mac, wenn nicht, würde der Quellcode dann für L/M völlig neu zu
schreiben sein?

cu
technicorn

Edit:
Bei Aufrufen wie EndDialog_(xxx) kann ich mir die Frage eigentlich selbst beantworten.

Verfasst: 12.03.2006 12:32
von ts-soft
Solche Resourcen gibt es nur unter Windows. Alle Arten von Dateien kann
man auf diese Art in seiner Exe unterbringen und Nutzen.

Der Vorteil gegenüber zum B. IncludeBinary, ist folgender:
Resourcen werden von Windows nicht automatisch mit dem Laden der Exe in
den Speicher befördert. Dies kann man also steuern. Zum Beispiel eine
AboutBox, die vom User nicht genutzt wird, braucht auch nicht in den
Speicher geladen zu werden.

Wer Plattformunabhängig programmieren will, dem nützen Resourcen nicht
viel!

Gruß
Thomas