Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Presentar numeros en una venta flotante (https://www.clubdelphi.com/foros/showthread.php?t=81438)

wcbs 14-11-2012 20:25:16

Presentar numeros en una venta flotante
 
hola amigos del foro

aver quien me puede dar una mano, tengo un programa que me genera un numero en una archivo de texto por cada ves que presionan la tecla enter, yo necesito mostrar ese numero en un esquina del monitor, que sea como una ventanita flotante para que el usuario vea cuantas veces a presionado
esa tecla, pero que la venta no haya que darle a ningún botón para que muestre el numero.

pero no tengo ni idea de como empezar, necesito una ayudita por favor ..

Gracias de antemano....

roman 14-11-2012 20:38:10

Pero, además de esa ventanita, ¿hay lguna parte visible de la aplicación o sólo eso?

// Saludos

TiammatMX 14-11-2012 20:39:10

Cita:

Empezado por wcbs (Mensaje 449496)
...pero no tengo ni idea de como empezar, necesito una ayudita por favor...

¿Podrías ser un poco más específico? Dar algunos datos de cómo, por qué, para qué, dónde, bajo qué condiciones...

Mientras más explícito, mejores respuestas tendrás.

ecfisa 14-11-2012 21:04:18

Cita:

Empezado por wcbs (Mensaje 449496)
hola amigos del foro

aver quien me puede dar una mano, tengo un programa que me genera un numero en una archivo de texto por cada ves que presionan la tecla enter, yo necesito mostrar ese numero en un esquina del monitor, que sea como una ventanita flotante para que el usuario vea cuantas veces a presionado
esa tecla, pero que la venta no haya que darle a ningún botón para que muestre el numero.

pero no tengo ni idea de como empezar, necesito una ayudita por favor ..

Gracias de antemano....

Hola.

Según te entiendo y si estamos hablando de un form, se podría hacer:
Código Delphi [-]
...
implementation

var
  ContadorDeEnter: Integer = 0;

procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview:= True;
  StaticText1.AutoSize:= False;
  StaticText1.Caption:= '';
  StaticText1.BevelKind:= bkTile;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Inc(ContadorDeEnter);
    StaticText1.Caption:= IntToStr(ContadorDeEnter);
  end;
end;
...
donde StaticText1 estaría ubicada en una esquina del form.

Pero como te indicaron anteriormente tenes que dar mas información, este código sería inútil en una aplicación de consola por ejemplo...

Saludos.

wcbs 14-11-2012 21:23:56

ok...gracias tiammat y roman por la rapidez....


es como les comentaba anterior mente, yo tengo un programa que al presionar la tecla enter,
en un archivo que esta en c:\DBA\contar.txt en la primera linea de ese archivo va poniendo por ejemplo 1 cuando presiona una vez ,2 si presiona la segunda vez y se van incrementado los números
pero siempre en esa misma linea...ahora bien lo que quiero es ver como hago en delphi una ventanita
pequeñita que me salga en la esquina de arriba de la pantalla que me muestre ese numero para que los chicos vean la cantidad de veces que presionaron enter, pero que esa ventanita lo automáticamente...

pero como le digo no se como empezar, hacerlo ...

ecfisa 14-11-2012 21:44:26

Cita:

Empezado por wcbs (Mensaje 449508)
ok...gracias tiammat y roman por la rapidez....

es como les comentaba anterior mente, yo tengo un programa que al presionar la tecla enter,
en un archivo que esta en c:\DBA\contar.txt en la primera linea de ese archivo va poniendo por ejemplo 1 cuando presiona una vez ,2 si presiona la segunda vez y se van incrementado los números
pero siempre en esa misma linea...ahora bien lo que quiero es ver como hago en delphi una ventanita
pequeñita que me salga en la esquina de arriba de la pantalla que me muestre ese numero para que los chicos vean la cantidad de veces que presionaron enter, pero que esa ventanita lo automáticamente...

pero como le digo no se como empezar, hacerlo ...

Yo sabia que la opción "Modo de Usuario Invisible" me iba a traer problemas... :D

Entonces:
Código Delphi [-]
...
implementation

var
  ContadorDeEnter: Integer;
  Arch: TextFile;

procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
begin
  KeyPreview:= True;
  AssignFile(Arch, 'C:\DBA\contar.txt');
  Reset(Arch);
  while not eof(Arch) do
    readln(Arch, s);
  CloseFile(Arch);
  ContadorDeEnter:= StrToInt(s);
  Append(Arch);
  StaticText1.AutoSize:= False;
  StaticText1.Caption:= s;
  StaticText1.BevelKind:= bkTile;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Inc(ContadorDeEnter);
    StaticText1.Caption:= IntToStr(ContadorDeEnter);
    Writeln(Arch, StaticText1.Caption);
  end;
end;
...
procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(Arch);
end;

Saludos.

ecfisa 14-11-2012 21:54:39

O con el mismo resultado y más simple:
Código Delphi [-]
implementation

const
   RTA_ARCH = 'C:\DBA\contar.txt';
var
  ContadorDeEnter: Integer;
  TS: TStrings;

procedure TForm1.FormCreate(Sender: TObject);
var
  s: string;
begin
  KeyPreview:= True;
  TS:= TStringList.Create;
  TS.LoadFromFile(RTA_ARCH);
  ContadorDeEnter:= StrToInt(TS[TS.Count-1]);
  StaticText1.AutoSize:= False;
  StaticText1.Caption:= TS[TS.Count-1];
  StaticText1.BevelKind:= bkTile;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = #13 then
  begin
    Inc(ContadorDeEnter);
    StaticText1.Caption:= IntToStr(ContadorDeEnter);
    TS.Add(StaticText1.Caption);
  end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  TS.SaveToFile(RTA_ARCH);
  TS.Free
end;

Saludos.

wcbs 15-11-2012 01:42:16

Hola ecfisa
Disculpa la tardanza ya que estuve que salir, acabo de probar las dos forma que me pusiste pero no me trabajan no se que estoy haciendo mal, pero te agrego por acá lo que e estado probando, pero de esta forma me lee el archivo pero debo presionar el botón leer para que me lea el archivo, pero lo que busco es de como hacer que me lea el archivo constantemente sin presionar el botón leer, habrá
alguna forma de hacer que sea una ventanita que se quede permanente en la pantalla que se mantenga leyendo el archivo , aca te pongo lo que e echo...

Código Delphi [-]
 unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  Datos: TextFile;
  TS: TStrings;
   Linea: String;
   NumLinea: integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
AssignFile(Datos,'C:\DBA\contar.txt');
   Reset(Datos);
   NumLinea := 0;
   REPEAT

        TS:= TStringList.Create;
        Readln(Datos, Linea);
        Inc(NumLinea);
        UNTIL NumLinea = 1;
        TS.Clear;
        ExtractStrings(['|'], [], PChar(Linea), TS);
        Edit1.Text:= TS.Text;

       CloseFile(Datos);

   end;
    end.

mis conocimientos de programación no son muy amplio y este lo había echo también con un poco de ayuda, :D

ecfisa 15-11-2012 02:15:13

Hola.

Es que ese código es algo diferente del que te sugerí... Te adjunto un ejemplo funcionando para que puedas estudiarlo con tranquilidad.

Cualquier inconveniente no dudes en preguntar.

Saludos.

wcbs 15-11-2012 03:03:36

Gracias de nuevo amigo ecfisa

estoy probando el ejemplo que creaste, en este caso lo que hace es crear el archivo, estoy haciendo algunos cambio para ver como llego, pero mira dejame ver si me explico mas fácil, el archivo que quiero leer no crearlo, ya que el programa que uso lo crea el archivo contar.txt, lo que quiero es solo que la ventanita me lea ese archivo y que que cada segundo se mantenga leyendo y mostrando el numero, que se va generando, lo que quiero hacer es como si fuera un monitor de ese archivo,

en el ejemplo que te puse el me lee el archivo pero debo siempre darle al boton leer para verlo,
lo que ando buscando es no tener que darle al boton,...

un saludo de nuevo.....:D

ecfisa 15-11-2012 03:50:45

Cita:

Empezado por wcbs (Mensaje 449536)
en el ejemplo que te puse el me lee el archivo pero debo siempre darle al boton leer para verlo,
lo que ando buscando es no tener que darle al boton,...

Hola.

Correcto, en tu ejemplo es así. Pero los dos anteriores que te puse en los mensajes #6 y #7, hacen exáctamente lo que solicitas: Muestran automáticamente el número de presiones de la tecla Enter cuando esta es pulsada.
Además añade al archivo cada nueva pulsacion para que cuando la aplicación sea ejecutada nuevamente conserve el contador.

Cita:

estoy probando el ejemplo que creaste, en este caso lo que hace es crear el archivo
Si revisas el ejemplo que te adjunté (similar al del mensaje #7), verás que sólo se crea el archivo si no existe. Pero basta con eliminar (o poner entre llaves) esta parte:
Código Delphi [-]
  {
  if FileExists(Arch) then
    TS.LoadFromFile(Arch)
  else
  begin
    TS.Text:= '0';
    TS.SaveToFile(Arch);
    TS.LoadFromFile(Arch);
  end;
  }
Y agregar la línea:
Código Delphi [-]
  TS.LoadFromFile(Arch);
para que se anule esa acción.

Saludos. :)

wcbs 15-11-2012 13:55:24

Hola ecfisa de nuevo ...

Comprendo lo que me explica, pero al parecer no me e sabido explicar, tu ayuda es muy buena por que me as dado una buena idea para hacer un contador pulsando una tecla con tu ejemplo..

Ahora bien, una pregunta que yo se que para ti y muchos de los usuario con muchos conocimientos
de programación les sera mas fácil, el ejemplo que yo te puse, que debo modificar para que me lea la primera linea cada 1 segundo y me muestre el resultado en la ventanita, recuerda que el archivo lo genera el otro programa y constantemente le esta escribiendo.. y este que con la ayuda de ustedes solo me mostrara los resultados de cada cambio en ese archivo.

me dirás amigo ecfisa si me supe explicar mejor,...:(

nlsgarcia 16-11-2012 06:42:00

1 Archivos Adjunto(s)
wcbs,

Revisa el ejemplo anexo, es una implementación de un contador de pulsaciones de la Tecla Enter, el contador se muestra por pantalla en un control TLabel y se actualiza en un archivo de texto en la primera línea solamente usando la clase TFileStream, además monitorea por medio de un control TTimer si el archivo ha sido actualizado externamente cada un segundo y refleja el cambio en el TLabel.

Espero sea útil :)

Nelson.

ecfisa 16-11-2012 07:49:17

Cita:

Empezado por wcbs (Mensaje 449573)
... el ejemplo que yo te puse, que debo modificar para que me lea la primera linea cada 1 segundo y me muestre el resultado en la ventanita, recuerda que el archivo lo genera el otro programa y constantemente le esta escribiendo...

me dirás amigo ecfisa si me supe explicar mejor,...:(

Hola wcbs.

Tal vez fuí yo quien no te interpretó..

En principio basta con que agregues un TTimer con un Interval de 1000 milisegundos (1 seg) y en su evento OnTimer pongas el código que lee el dato del archivo.

Podes hacerlo mediante el procedimiento ReadLn como en tu código o, a mi criterio, de forma mas simple usando TStrings:
Código Delphi [-]
...
implementation

const
   RTA_ARCH = 'C:\DBA\contar.txt';

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  with TStringList.Create do
  try
    try
      LoadFromFile(RTA_ARCH);
      StaticText1.AutoSize := False;
      StaticText1.Caption  := Strings[Count-1];
      StaticText1.BevelKind:= bkTile;
      Timer1.Interval := 1000;
      Timer1.Enabled  := True;
    except
      raise Exception.Create('Error: No se encontró el archivo ' + RTA_ARCH);
    end;
  finally
    Free;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with TStringList.Create do
  try
    LoadFromFile(RTA_ARCH);
    StaticText1.Caption:= Strings[Count-1];
  finally
    Free;
  end;
end;

Saludos. :)

wcbs 16-11-2012 14:20:12

Bueno mi amigo ecfisa usted acaba de dar en el clavo...:) me as salvado, yo sabia que para ti al igual que muchos de por acá que les seria mas fácil, yo tengo varios días leyendo por acá y los manuales
de delphi pero es mucha información juntas y para mi no es tan fácil... Usted es mi Héroe..

Ahora dos consulta mas, que con tu ayuda estoy comprendiendo mas y sigo motivado y comprendiendo mas a Delphi...

la Primera...
puedes por favor tu de comprimir me en un archivo rar ese último ejemplo que me pusiste, quiero ver como lo hiciste ya que veo que pocas instrucciones hiciste todo el proceso y yo llevaba muchas lineas de comando y no me acercaba a lo que hiciste con pocos comando.


la segunda..
El ejemplo del CounterEnter que me hiciste como yo lo puedo en ves de hacerlo con la tecla enter hacerlo por ejemplo con la tecla ¨A¨ y que el conteo se quede marcado y que cuando presione solo la tecla ¨X¨ el conteo se ponga el cero asta esperar de nuevo contar la cantidad de veces de presionar la tecla ¨A¨ yo se que tu lo haría mas fácil para yo ir comprendiendo mas la programación con delphi..

Te agradezco enorme mente tu ayuda ..

Un saludo de nuevo para Ti.....^\||/

ecfisa 16-11-2012 16:14:28

Hola wcbs.

Cita:

puedes por favor tu de comprimir me en un archivo rar ese último ejemplo que me pusiste
Te lo voy a deber en .RAR por que uso WinZip, pero creo lo podes abir con WinRar.


Cita:

El ejemplo del CounterEnter que me hiciste como yo lo puedo en ves de hacerlo con la tecla enter hacerlo por ejemplo con la tecla ¨A¨ y que el conteo se quede marcado y que cuando presione solo la tecla ¨X¨ el conteo se ponga el cero asta esperar de nuevo contar la cantidad de veces de presionar la tecla ¨A¨
Si no te entiendo mal sería:
Código Delphi [-]
implementation

var
  ContadorDeAes: Integer = 0;  // (si queres podes dejar 'ContadorDeEnter')

...

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Upcase(Key) of
    'A': begin
           Inc(ContadorDeAes);
           StaticText1.Caption:= IntToStr(ContadorDeAes);
           TS.Add(StaticText1.Caption);
         end;
    'X': ContadorDeAes:= 0;
  end;
end;
...

Saludos.

wcbs 16-11-2012 17:24:00

Hey... amigo ecfisa como decía anteriormente usted es un genio, el contar funciona de maravillas
Uuuuffff me a dado muchiiiiiiisima ayuda....después de ver como lo hiciste con pocas lineas
veo que tengo que seguir aprendiendo, y esto vale muy bien el esfuerzo, ahora le estoy dando forma a
la ventina y la estoy poniendo transparente, y esta quedando muy bien gracias a usted...amigo...

el segundo ejemplo lo probare, al terminal esta ventanita y ya te comentare y cualquier consulta
te escribiré por acá de nuevo...


Gracias.....^\||/ :D

wcbs 16-11-2012 18:44:03

Hola ecfisa yo con otra consulta

el contador esta funcionado ya configure la ventanita, pero el archivo que me tiene que leer lo esta leyendo peri mira esto que se me escapaba, el archivo tiene en la primera linea los números así en este orden..
1 125 0 0 0 0 0 1.00000 0.00000 0.00000 0.0000

ahora bien el numero que me tiene que mostrar es solo el 125 , como hago para que solo me muestre esos caracteres de esa linea en particular, veras que en primer numero es el 1 que ese no debe salir luego hay un espacio y luego el 125 y hay otro espacio, solo donde esta el 125 es que necesito.

acá te agrego ya lo que tengo gracias a tu ayuda, me dirás por favor que debo agragar...?

Código Delphi [-]
  unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;  // TTimer en la pestaña 'System'
    StaticText1: TStaticText;
    Label1: TLabel; // StaticText en la pestaña 'Additional'
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation  {$R *.dfm}


const
   RTA_ARCH = 'C:\DBA\contar.txt';

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
  with TStringList.Create do
  try
    try
      LoadFromFile(RTA_ARCH);
      StaticText1.AutoSize := False;
      StaticText1.Caption  := Strings[Count-1];
      StaticText1.BevelKind:= bkTile;
      Timer1.Interval := 100;
      Timer1.Enabled  := True;
    except
      raise Exception.Create('Error: No se encontró el archivo ' + RTA_ARCH);
    end;
  finally
    Free;
  end;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin
  with TStringList.Create do
  try
    LoadFromFile(RTA_ARCH);
    StaticText1.Caption:= Strings[Count-1];
  finally
    Free;
  end;
end;

end.

^\||/....

ecfisa 16-11-2012 19:18:10

Cita:

Empezado por wcbs (Mensaje 449705)
Hola ecfisa yo con otra consulta

el contador esta funcionado ya configure la ventanita, pero el archivo que me tiene que leer lo esta leyendo peri mira esto que se me escapaba, el archivo tiene en la primera linea los números así en este orden..
1 125 0 0 0 0 0 1.00000 0.00000 0.00000 0.0000

ahora bien el numero que me tiene que mostrar es solo el 125 , como hago para que solo me muestre esos caracteres de esa linea en particular, veras que en primer numero es el 1 que ese no debe salir luego hay un espacio y luego el 125 y hay otro espacio, solo donde esta el 125 es que necesito.

Hola.

Basta con que reemplaces cada línea que dice:
Código Delphi [-]
  StaticText1.Caption  := Strings[Count-1];

Por:
Código Delphi [-]
  StaticText1.Caption:= Copy(Strings[Count-1], 3, 3);

Saludos.

wcbs 16-11-2012 20:28:08

Ok...

lo estoy haciendo pero me sigue saliendo el primer numero ¨1¨ y el ¨125¨ e probado cambiando

StaticText1.Caption:= Copy(Strings[Count-1], 3, 3);.....los números 3, 3, por 4, 5,
para ver... sera el StaticText.AutoSize :=False; que no me deja seleccionar
esos tres caracteres... Disculpa tanto las preguntas...Amigo ecfisa...

:o


La franja horaria es GMT +2. Ahora son las 07:24:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi