Paradox Community

Items in pnews.paradox-intl-es

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.-



Copyright © 2004 thedbcommunity.com