Seite 1 von 1

Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 11:40
von mkersch
Hallo Forumsmitglieder,

um meine Masken zu erstellen verwende ich den Formdesigner.

Wenn ich mir eine Funktion erzeugen lasse kann ich diese wunderbar nachbearbeiten und den entsprechenden Objekten , die ja immer den Namen oXbp erhalten, einen
neuen Namen geben z.b. oButtonStart usw.

Muss ich aber das Menue erweitern bzw. verändern erhalte ich wieder meine Funktion mit den Standardnamen oXbp.

Was muss ich machen das ich nicht wieder alles mühsam nachbearbeiten muss ?
Bzw. gibt es einen Formdesigner mit dem ich kompfortabel diese Menues für Xbase generieren kann ?

Vielen Dank

mkersch

Re: Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 12:30
von brandelh
Hi,
  1. CLASS CODE verwenden,
  2. iVAR Namen sinnvoll ausfüllen, entweder direkt in der Eigenschaftsliste oder
    im Menü "Edit- Symbols for iVar" ... der erste Eintrag ist hier übrigens der Klassenname des Dialogfensters.
PS: ich verwende den XppFD nur um groß die nötigen Controls zu erhalten und arbeite danach nur noch mit dem Quellcode.
Insbesondere die Positionierung der Controls inkl. Größenfestlegung ist mir mit der Maus zu stressig und ohne Undo zu fehlerträchtig.

Re: Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 13:21
von mkersch
Vielen Dank für die schnelle Info.

Mit CLASS-Code wird für die Namen der Name aus iVarName übernommen.

Wie ist es dann mit :title oder mit :activate diese Punkte müssen dann nach wie vor manuell nachbearbeitet werden ?

Muss ich bei einer "Neuerzeugung" diese Punkte wieder manuell nachziehen ?

//**********************************
Vorgehen in der Vergangenheit:

Habe meine erste Maske mit dem Formdesigner erstellt und die Form dann abgespeichert. z.B. Form_1.xff und Form_1.prg

Das Programm habe ich dann kopiert (Form_1.prg) nach mein_prg.prg.

Mein_prg.prg habe ich dann entsprechen nachbearbeitet (Objektname, title, aktivate usw).

Falls ich nochmal eine Änderung benötigt habe, änderte ich meine Form Form_1.xff. Das geänderte Programm speicherte ich wieder in Form_1.prg ab.

Die Ergänzungen bzw. Änderungen (Positionen usw) kopierte bzw. fügte ich dann in mein aktuelles Programm Mein_prg.prg ein.
// **********************************

Diese Frage stellte ich deshalb, weil ich der Meinung war, das in der Zwischenzeit der Formdesigner kompfortapler wäre. Wenn dies nicht der Fall ist, werde ich
meine altbewährte Methode auch in Zukunft verwenden.

Danke.

mfg
mkersch

Re: Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 13:35
von brandelh
Hi,

der CLASS Code erstellt zwei Dateien:
angenommen du wählst den Namen MeinDialog.PRG, dann wird noch ein _MeinDialog.PRG erstellt.
Vorgesehen ist nun, dass du MeinDialog.PRG nach deinen Wünschen änderst, und _MeinDialog.PRG in Ruhe läßt.
Falls nun der XppFD nochmals aufgerufen wird und nochmals MeinDialog.PRG erstellt wird, ändert der XppFD ausschließlich _MeinDialog.PRG und läßt deine Änderungen in MeinDialog.PRG in Ruhe.

Allerdings hat das einen Schöheitsfehler (zumindest aus meiner Sicht), die Positionsangaben sind nur als fixe Parameter in den NEW() Blöcken hinterlegt.
Um in der eigenen INIT die Controls dynamisch zu positonieren, müsste man diese aber als iVar haben ...
Man kann sie aktuell nur in CREATE oder RESIZE nachträglich verschieben ... ich finde das unschön ;-)

Re: Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 13:55
von mkersch
Danke für die Info.

Und Entschuldigung für meine super Rechtschreibung (kompfortapler ==> komfortabel)

mfg.

mkersch

Re: Anfängerfrage Formdesigner

Verfasst: Mo, 25. Jun 2012 20:05
von AUGE_OHR
brandelh hat geschrieben:Um in der eigenen INIT die Controls dynamisch zu positonieren, müsste man diese aber als iVar haben ...
Man kann sie aktuell nur in CREATE oder RESIZE nachträglich verschieben ... ich finde das unschön ;-)
ich weiss was du meinst aber man kann von jedem XbPart mit o:Currentpos() ja die Information bekommen.

Friedhelm erzählte doch auf der Devcon das in einer der Xbase++ DLL schon eine "resize" Routine stecken soll ... ist das die "GroupManager" Class ?

Re: Anfängerfrage Formdesigner

Verfasst: Di, 26. Jun 2012 8:54
von brandelh
AUGE_OHR hat geschrieben:
brandelh hat geschrieben:Um in der eigenen INIT die Controls dynamisch zu positonieren, müsste man diese aber als iVar haben ...
Man kann sie aktuell nur in CREATE oder RESIZE nachträglich verschieben ... ich finde das unschön ;-)
ich weiss was du meinst aber man kann von jedem XbPart mit o:Currentpos() ja die Information bekommen.
Hallo Jimmy,
da irrst du dich, in :INIT() kann man keine Methode wie :CurrentPos() oder :CurrentSize() ausführen, nach der Definition des Klassenmodells, sollte man aber genau in der eigenen INIT() nach dem SUPER Aufruf die Werte ändern können, bevor man die Resourcen angefordert hat (in create() ).
Was du vermutlich meinst ist, dass man ja auch genausogut in CREATE() oder RESIZE() mit beiden Funktionen hantieren kann, das stimmt und in RESIZE() ist das sogar sehr elegant, weil man sich gleich um die Größenänderung mitkümmern kann (als grundsätzlich erst hier die Größen berechnet).
Dennoch sind Methoden-Aufrufe um Welten langsamer als direkte Variablen Zugriffe und so wäre es nur Folgerichtig, wenn diese Werte (aPos, aSize) als iVars vorliegen würden.
AUGE_OHR hat geschrieben:Friedhelm erzählte doch auf der Devcon das in einer der Xbase++ DLL schon eine "resize" Routine stecken soll ... ist das die "GroupManager" Class ?
Da bei einem Resize() nicht alle Controls gleich behandelt werden können, muss man entweder das gewünschte Verhalten (SLE wird rechts an den Rand verlängert, MLE nach rechts und unten, Buttons unten bleiben unten, Buttons rechts, bleiben rechts etc.) in einer eigenen Resize() Methode programmieren, oder in einer eigens dafür bestimmten Beschreibungsvariablen festgelegt werden (so macht es WinDev im GUI Editor).

Re: Anfängerfrage Formdesigner

Verfasst: Di, 26. Jun 2012 9:10
von Manfred

Re: Anfängerfrage Formdesigner

Verfasst: Di, 26. Jun 2012 9:28
von brandelh
Interessant =D>