Subject: | Re: Escalar un form
| Date: | Mon, 28 May 2007 16:50:42 +0200
| From: | "Egbert Babst" <EgbertBabst@BabstSoft.com>
| Newsgroups: | pnews.paradox-intl-es
|
Hola Nando,
por primero: Contrariamente a todos los avisos de la comunidad de Paradox
empleo ZoomFitWidth. Pues me cuido de que el desktop siempre se adapte en la
anchura. Eso tiene en verdad algunas consecuencias desfavorables para la
representación de pantalla, conozco ésas sin embargo y las puedo compensar.
He hablado de ello en la última Convención de Paradox. El documento está
desgraciadamente escrito sólo en alemán, inglés o francés:
Título: "Young Application with old Paradox"
http://www.ponx.org/pdiv/prcp06.htm
En la última parte hay a eso algunas observaciones y ejemplos de código.
Al problema:
El usuario debería poder tirar la ventana de aplicación en el tamaño, que en
ZoomBestFit le permite que todos objetos del desktop resulten visibles.
Un problema de ZoomFitWith consiste en que los Bitmaps del formulario no
estan escalados automáticamente por Paradox si el tamaño de aplicación se
cambia.
Las 2 soluciones:
(1) Si termino una aplicación, almaceno la posición y tamaño en una tabla
"OptTemp.db".
>>>
method menuAction(var eventInfo MenuEvent)
var
lib library
app application
OptTC TCursor
x,y,w,h longInt
endVar
if eventInfo.isPreFilter() then
;// This code executes for each object on the form
else
;// This code executes only for the form
if eventInfo.ID()=MenuCanClose then
App.GetPosition(x,y,w,h)
switch
case NOT isFile("OptTemp.db"):
case NOT OptTC.open("OptTemp"):
case OptTC.fieldNo("AppX")=0:
case OptTC.isEmpty():
case NOT OptTC.Edit():
case NOT OptTC.update( "AppX",x,
"AppY",y,
"AppW",w,
"AppH",h):
OptTC.CancelEdit()
case NOT OptTC.unlockRecord():
OptTC.CancelEdit()
endSwitch
if OptTC.isAssigned() then OptTC.close() endIf
sleep() sleep() sleep()
endIf
endIf
endMethod
<<<
En caso de inicio de la aplicación pongo estos parámetros según los valores
almacenados.
He simplificado el método para este ejemplo:
>>>
method cmAppSize() logical
{Stellt die Größe der Applikation wieder so her, wie sie zuletzt beim
Programm-Ende gespeichert wurde.
}
var
App application
OptTC TCursor
stProblem string
Sitzung session
endVar
stProblem.blank()
switch
case NOT Sitzung.open():
stProblem="Konnte kein Handle für die aktuelle Sitzung
ermitteln."
case NOT OptTC.open("OptTemp"):
stProblem="Kein Zugriff auf die Optionen-Tabelle."
case OptTC.isEmpty():
stProblem="Die temporäre Optionen-Tabelle war leer."
case OptTC."AppX"=0 AND OptTC."AppY"=0:
stProblem="Es waren keine Positions-Daten gespeichert."
otherwise:
app.setPosition(OptTC."AppX",OptTC."AppY",OptTC."AppW",OptTC."AppH")
endSwitch
if OptTC.isAssigned() then
OptTC.close()
endIf
if NOT stProblem.isBlank() then
ErrorShow("Applikations-Größe unverändert: "+stProblem)
RETURN FALSE
endIf
RETURN TRUE
endMethod
<<<
(2) En mi caso tengo diversos Bitmaps en los formularios. Junto éstos en un
grupo con el nombre "Schalterleiste" . Durante el inicio y con cada
alteración del tamaño del formulario, estos Bitmaps deben ser actualizados
extra porque Paradox no lo hace automaticamente.
También este ejemplo está simplificado:
>>>
method SchalterBilderAnpassen() logical
var
Namen array[] String
Zähler SmallInt
Obj,
BildUI UIObject
endVar
;Falls Schalterleiste vorhanden, deren Bilder ermitteln und anpassen
Try
if NOT Obj.attach("SchalterLeiste") then fail() endIf
Obj.enumObjectNames(Namen)
sleep()
For Zähler from 2 to Namen.size()
BildUI.attach(Namen[Zähler])
if BildUI.class="Bitmap" then
BildUI.Magnification=MagnifyBestFit
endIf
endFor
onFail
ErrorPop()
RETURN FALSE
endTry
RETURN TRUE
endMethod
<<<
Estas adaptaciones de los Bitmaps se tiene que realizar cada vez de nuevo si
se descubre una modificación del tamaño de la aplicación. De eso examino en
el MausEnter-event (pues si el ratón toca el formulario, por ejemplo después
de una modificación de las medidas de ventana mediante el ratón), si el
tamaño se ha cambiado:
>>>
method mouseEnter(var eventInfo MouseEvent)
if eventInfo.isPreFilter() then
;// Dieser Code wird für jedes Objekt auf dem Formular ausgeführt
else
;// Dieser Code wird nur für das Formular ausgeführt
PrüfeApplikation()
endIf
endMethod
<<<
El método "PrüfeApplikation() se constituye en eso:
>>>
var
x,y,w,h,
xAlt,
yAlt,
wAlt,
hAlt LongInt
endVar
method PrüfeApplikation()
var
App Application
endVar
Try
App.GetPosition(x,y,w,h)
if NOT xAlt.isAssigned() then
xAlt=x
yAlt=y
wAlt=w
hAlt=h
SchalterBilderAnpassen()
else
if xAlt<>x OR
yAlt<>y OR
wAlt<>w OR
hAlt<>h then
SchalterBilderAnpassen()
xAlt=x
yAlt=y
wAlt=w
hAlt=h
endIf
endIf
onfail
ErrorShow()
endTry
endMethod
<<<
De manera parecida se puede comprobar la posible modificación de tamaño del
formulario en tamaño constante de la ventana de aplicación (sólo necesario,
si Bitmaps están contenidos). En otro caso ZoomFitWidth se cuida de la
adaptación necesaria. Importante en eso es también, que el formulario tiene
tales medidas, que todos los objetos están visibles.
Atención: ¡Se debería evitar ZoomBestFit cueste lo que cueste!
Que eso te pueda ser útil ;-)
Un saludo,
Egbert
--
_______________________________
Babst, Institutionsberatung,
BabstSoft e.K.
Ludwigstr. 86
64546 Mörfelden-Walldorf
Tel: 06105 74974
Handelsregister:
Amtsgericht Darmstadt HRA 53360
www.BabstSoft.com
_______________________________
"Nando" <mabergal@quitarestoyahoo.es> schrieb im Newsbeitrag
news:465a0a32$1@pnews.thedbcommunity.com...
>
> Egbert, anticipándome a la respuesta de jvqcer, yo utilizo Paradox 9, y me
> interesaría me explicaras tu solución.
>
> Gracias de antemano.-
|