Page 1 of 1

RASPI / FiveLinux y el alineamiento de los SAY

Posted: Tue Feb 16, 2016 7:33 pm
by George
Como alinear (justify) a la izquierda y a la derecha los textos creados con el comando SAY?
Lo que sucede es que los SAY creados con FiveLinux en Raspbian (Debian en Raspberry PI) siempre salen centralizados.


Image
Añadi el siguiente codigo:
http://forums.fivetechsupport.com/viewt ... 11&t=10992 Sugerido por un compañero del foro, pero no me funciono.

Alguien ha podido alinear los textos en SAY ?
Alguna sugerencia?

Estoy usando la mas reciente version de harbour y fivelinux para Raspberry Pi sugerida por Antonio.

Saludos,

George

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Tue Feb 16, 2016 8:43 pm
by Antonio Linares
George,

Cómo has llamado a la función SAYSETALIGN() ?

Que parámetros le has proporcionado ?

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Tue Feb 16, 2016 9:33 pm
by George
Antonio,
Este es el codigo que he usado acorde a lo indicado en el post:
@ 14, 2 SAY oSayName PROMPT "Name:" OF oFormCompany SIZE 100,20 PIXEL
oSayName:SetAlignment(0.0, 0.5)
No se ejecuta ningun cambio en el alineamiento del texto y en la consola sale el siguiente mensaje:
(main:1803): Gtk-CRITICAL **: IA__gtk_misc_set_alignment: assertion 'GTK_IS_MISd
Saludos,

George

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Wed Feb 17, 2016 9:08 am
by Antonio Linares
George,

Como has añadido el método SetAlignment() en la clase TSay ?

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Wed Feb 17, 2016 2:35 pm
by George
Antonio,
Estos son _ que hice para agregar el nuevo metodo SetAlignment a la clase TSay:

SAY.PRG

Code: Select all

#include "FiveLinux.ch"

//----------------------------------------------------------------------------//

CLASS TSay FROM TControl

   METHOD New( nRow, nCol, oWnd, cText, nWidth, nHeight, lUpdate, oFont,;
               lPixel, lDesign, cVarName )

   METHOD cGenPrg()

   METHOD SetText( cText ) INLINE SaySetText( ::hWnd, cText )

   METHOD GetText() INLINE SayGetText( ::hWnd )

   METHOD SetJustify( nType ) INLINE SaySetJustify( ::hWnd, nType ) // LEFT = 0, RIGHT = 1, CENTER = 2, FILL = 3

   METHOD setangle(nAngle) INLINE SaySetAngle(::hWnd,nAngle)
   
  // Added
   METHOD SetAlignment( fHAlign, fVAlign ) INLINE SaySetAlign( ::hWnd, fHAlign, fVAlign )
ENDCLASS

//----------------------------------------------------------------------------//

METHOD New( nRow, nCol, oWnd, cText, nWidth, nHeight, lUpdate, oFont,;
            lPixel, lDesign, cVarName ) CLASS TSay

   DEFAULT oWnd := GetWndDefault(), nWidth := 70, nHeight := 20,;
           lUpdate := .f., lPixel := .F., lDesign := .F.

   ::hWnd     = CreateSay( cText )
   ::lUpdate  = lUpdate
   ::lDrag    = lDesign
   ::cVarName = cVarName

   oWnd:AddControl( Self )

   SetParent( ::hWnd, oWnd:hWnd )
   ::SetPos( nRow * If( lPixel, 1, 10 ), nCol * If( lPixel, 1, 10 ) )
   ::SetSize( nWidth, nHeight )

   if oFont != nil
      ::SetFont( oFont )
   endif

   ::Link()
   ::Show()

return Self

//----------------------------------------------------------------------------//
 
METHOD cGenPrg() CLASS TSay 
 
   local cCode := CRLF + "   @ " + Str( ::nTop, 3 ) + ", " + ; 
                  Str( ::nLeft, 3 ) + " SAY " + ::cVarName + ;
                  ' PROMPT "' + ::GetText() + '"' + ; 
                  ' SIZE ' + Str( ::nWidth, 3 ) + ", " + ; 
                  Str( ::nHeight, 3 ) + " PIXEL OF " + ::oWnd:cVarName + CRLF 
return cCode
SAY.C

Code: Select all

[code]#include <hbapi.h>
#include <gtk/gtk.h>

gboolean button_press_event( GtkWidget * hWnd, GdkEventButton * event );
gboolean motion_notify_event( GtkWidget * hWnd, GdkEventMotion * event );

HB_FUNC( CREATESAY )
{
   GtkWidget * hWnd = gtk_label_new( hb_parc( 1 ) );
   GtkWidget * event_box = gtk_event_box_new();

   gtk_signal_connect( GTK_OBJECT( event_box ), "button_press_event",
                       ( GtkSignalFunc ) button_press_event, NULL );

   gtk_signal_connect( GTK_OBJECT( event_box ), "motion_notify_event",
                       ( GtkSignalFunc ) motion_notify_event, NULL );

   gtk_widget_set_events( event_box, GDK_EXPOSURE_MASK
             | GDK_LEAVE_NOTIFY_MASK
             | GDK_BUTTON_PRESS_MASK
             | GDK_POINTER_MOTION_MASK
             | GDK_POINTER_MOTION_HINT_MASK );

   gtk_container_add( GTK_CONTAINER( event_box ), hWnd );
   gtk_widget_show( hWnd );

   hb_retnl( ( HB_ULONG ) event_box );
}

HB_FUNC( SAYSETTEXT )
{
   GtkWidget * hWnd = ( GtkWidget * ) hb_parnl( 1 );
   GList * children = gtk_container_get_children( ( GtkContainer * ) hWnd );

   gtk_label_set_text( children->data, hb_parc( 2 ) );
}

HB_FUNC( SAYGETTEXT )
{
   GtkWidget * hWnd = ( GtkWidget * ) hb_parnl( 1 );
   GList * children = gtk_container_get_children( ( GtkContainer * ) hWnd );

   hb_retc( ( char * ) gtk_label_get_text( children->data ) );
}

HB_FUNC( SAYSETJUSTIFY )
{
   GtkWidget * hWnd = ( GtkWidget * ) hb_parnl( 1 );

   gtk_label_set_justify( ( GtkLabel * ) hWnd, ( GtkJustification ) hb_parnl( 2 ) );
}

HB_FUNC( SAYSETANGLE )
{
   GtkWidget * hWnd = ( GtkWidget * ) hb_parnl( 1 );
  GList * children = gtk_container_get_children( ( GtkContainer * ) hWnd );
   gtk_label_set_angle(  children->data ,  hb_parnl( 2 ) );
}

// Added
HB_FUNC( SAYSETALIGN )
{

   GtkWidget * hWnd = (GtkWidget * ) hb_parnl( 1 );

   gtk_misc_set_alignment( ( GtkMisc * ) hWnd, hb_parnd( 2 ), hb_parnd( 3 ) );
}

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Wed Feb 17, 2016 2:49 pm
by Antonio Linares
George,

He encontrado esto al revisar la documentación de gtk_misc_set_alignment():

https://developer.gnome.org/gtk3/stable ... -alignment
gtk_misc_set_alignment has been deprecated since version 3.14 and should not be used in newly-written code.
Use GtkWidget's alignment (“halign” and “valign”) and margin properties or GtkLabel's “xalign” and “yalign” properties

Re: RASPI / FiveLinux y el alineamiento de los SAY

Posted: Wed Feb 17, 2016 2:58 pm
by Antonio Linares
Para modificar esas propiedades prodriamos usar:

gtk_object_set_data()

Tienes ejemplos de uso en source\winapi\windows.c (fivelinux)