• Publicidad

Crear interfaz gráfica con Win32::GUI

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-12-02 06:23 @307

Ouch! Me he colado... No me daba cuenta de que estabas hablando de Win32::GUI.

Bueno, el caso es que da igual: tanto en HTML como en los entornos gráficos sí que se puede cambiar el orden de la tabulación; y tampoco viene indicado en las cajas de texto los caracteres que quedan por meter.

Una buena indicación para esto último es la de crear ese control con el ancho en caracteres igual al máximo ancho de caracteres de entrada permitido.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Crear interfaz gráfica con Win32::GUI

Notapor Txemaracas » 2011-12-02 08:42 @404

Gracias por la respuesta pero ¿me podrías explicar un poco esto último? ¿Dice algo como que cada vez que se introduzca un carácter ir sumando uno al contador y una vez sea igual que el máximo permitido, pare? Es que en este caso no sabría cómo saber cuando se mete un carácter :?
Txemaracas
Perlero nuevo
Perlero nuevo
 
Mensajes: 136
Registrado: 2011-04-04 10:06 @462

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-12-02 10:41 @487

Lo siento, nunca he programado en Win32::GUI. Y tampoco uso Windows desde hace muchos años.

Cuando usaba Delphi o Visual Basic, se podía capturar los eventos de pulsación de teclas, por lo que se podía personalizar cualquier control.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz gráfica con Win32::GUI

Notapor jacks » 2011-12-16 09:22 @432

Hola, tengo una pregunta. Cuando el usuario introduce la contraseña activo SetPasswordChard(1) y me sustituye lo que pone el usuario por unos cuadrados grandes. ¿Hay alguna manera de que en vez de ser los cuadrados sea un "*"?
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-12-16 10:13 @467

SetPasswordChar(1) no significa que "activas" algo, sino que estás definiendo el carácter usado para representar a los caracteres que ocultan a los reales, como que son el carácter con punto de código '1'.

El valor, por defecto, en Windows, es el '*', tal y como se comenta aquí, así que la solución primera es... no usar SetPasswordChar() :)

Si quieres usar otro carácter que no sea '*' entonces sí que debes usarla, indicando en el primer argumento qué carácter vas a usar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz gráfica con Win32::GUI

Notapor jacks » 2011-12-18 15:23 @682

Vale, ya tengo todo terminado, pero hay un problema: cuando pulso el botón para actualizar las páginas web, como son muchas, pues tarda su tiempo y mientras se ejecuta, si pulso con el ratón en la pantalla del programa, se me pone en blanco y pone "No responde" hasta que termina de ejecutarse.

He pensado que igual desde que se ejecuta ese proceso hasta que termina, si se cambia el cursor y se pone el reloj de arena quizás se solvente o sino con una pantalla de "Loading".
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-12-18 17:35 @774

Cuando un programa va a hacer una tarea que va a llevar mucho tiempo, se lo tenemos que indicar de una manera al usuario, pues sino pensará que el programa se ha colgado.

Lo normal es usar una caja de diálogo con una barra de progreso indicando el porcentaje de lo hecho, o una caja de texto donde va informando de lo que va haciendo.

Así, el usuario sabrá que tiene que esperar y, aproximadamente, cuanto.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz gráfica con Win32::GUI

Notapor jacks » 2011-12-20 06:45 @323

Sí, probé a usar lo que aparece en las demos "LoadingWindow" pero no sé qué parámetros pasarle para que salga la barra azul de carga. Solo me salía la ventana porque en este código desde la línea 9 hasta la línea 15 no sé cómo hacerlo con mi programa. Yo quiero, pienso que será por cada página que se actualiza, pero no sé cómo pasarle esos parámetros :? Creo que se pasarán en la línea 15:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. # Enumerate registry key HKCR\CLSID.  All classes with a 'Control'
  2. # subkey are ActiveX controls
  3. sub getInstalledControls {
  4.     my $abort = 0;
  5.     LoadingWindow::Show($mw);
  6.  
  7.     my @controls = ();
  8.  
  9.     my $clsidkey = Win32::TieRegistry->new(
  10.         "HKEY_CLASSES_ROOT/CLSID/",
  11.         { Access => "KEY_READ", Delimiter => '/', }
  12.     );
  13.     my $r = $clsidkey->TiedRef();
  14.  
  15.     LoadingWindow::SetRange(scalar keys %$r);
  16.  
  17.     while(my ($key, $value) = each %$r) {
  18.        $abort = LoadingWindow::Step();
  19.        last if $abort;
  20.  
  21.        # next, unless we have an ActiveX control
  22.        next unless ref($value) and exists $value->{Control};
  23.  
  24.        my $ProgID = $value->{ProgID}->{'/'};
  25.  
  26.        # Some controls appear to have an empty name
  27.        next unless defined $ProgID and length $ProgID > 0;
  28.  
  29.        my $VIProgID = $value->{VersionIndependentProgID}->{'/'};
  30.        $ProgID .= " ($VIProgID)" if defined $VIProgID and length $VIProgID > 0;
  31.  
  32.        push @controls, $ProgID;
  33.     }
  34.    
  35.     LoadingWindow::Close();
  36.     return $abort ? undef : \@controls;
  37. }
  38.  
  39. # package to wrap the progress bar that we show while
  40. # loading stuff from the registry
  41. package LoadingWindow;
  42. our ($win,$terminate);
  43.  
  44. # Initialise and show the progress bar mini-window
  45. sub Show {
  46.     my $parent = shift;
  47.  
  48.     $terminate = 0;
  49.  
  50.     $win = Win32::GUI::Window->new(
  51.         -parent      => $parent,        
  52.         -title       => "Loading ...",
  53.         -size        => [200,50],
  54.         -toolwindow  => 1,
  55.         -onTerminate => sub {$terminate = 1; 1;},
  56.     ) or die "new Lwindow";
  57.     $win->Center($parent);
  58.  
  59.     $win->AddProgressBar(
  60.         -name => 'PB',
  61.         -size => [$win->ScaleWidth(),$win->ScaleHeight()],
  62.         -smooth => 1,
  63.     ) or die "new Lprogress";
  64.     $win->PB->SetStep(1);
  65.  
  66.     $win->Show();
  67.     Win32::GUI::DoEvents();
  68.  
  69.     return 1;
  70. }
  71.  
  72. # Set the max ranges of the progress bar
  73. # (to the number of itertations of the
  74. # loop we will do)
  75. sub SetRange {
  76.     $win->PB->SetRange(0, shift) if $win;
  77.     return 1;
  78. }
  79.  
  80. # Step the progress bar.  Return 1 if we expect
  81. # the caller to abort
  82. sub Step {
  83.     return 1 if $terminate;
  84.  
  85.     $win->PB->StepIt() if $win;
  86.     Win32::GUI::DoEvents();
  87.     return 0;
  88. }
  89.  
  90. # Hide the min-window, and free any resources
  91. # it is using;  prepare for it to be used again
  92. sub Close {
  93.     if($win) {
  94.         Win32::GUI::DoEvents();
  95.         $win->Hide();
  96.         Win32::GUI::DoEvents();
  97.         undef $win;
  98.         undef $terminate;
  99.     }
  100.     return 1;
  101. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

Re: Crear interfaz gráfica con Win32::GUI

Notapor explorer » 2011-12-20 10:39 @485

Sí, en la línea 15 es donde se define el valor máximo de la barra de progreso.

A partir de ese momento, cada vez que se llama a Step(), se hace avanzar la barra de progreso (se supone que vamos a realizar tantos Step() como número indicamos antes).

Cuando la barra termina, el evento se dispara (línea 55) y pone una variable bandera a 1, por lo que luego, con el filtro de la 83, no seguirá adelante, aunque sigamos haciendo más llamadas Step().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Crear interfaz gráfica con Win32::GUI

Notapor jacks » 2011-12-22 10:54 @496

Hola estoy usando Win32::Word::Writer y usando estas tres líneas que aparecen en la documentación me dice el error de abajo ¿Por qué me da ese error?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $oWriter->SetStyle("Hyperlink");                 #A charachter style
  2. $oWriter->Write("http://www.as.com");
  3. $oWriter->ClearCharacterFormatting();            #Clear character style
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



"Could not set style (Hyperlink), it may not be defined in the document: El elemento con el nombre especificado no existe"
jacks
Perlero nuevo
Perlero nuevo
 
Mensajes: 148
Registrado: 2011-04-05 11:14 @510

AnteriorSiguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 14 invitados