Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Icono de progreso del Emule (https://www.clubdelphi.com/foros/showthread.php?t=96546)

Wellnic 20-12-2023 16:47:13

Icono de progreso del Emule
 
Hola, buenas, espero no haberme equivocado mucho de foro :)

Cuando el Emule está descargando cosas, su icono en la barra de tareas muestra un gráfico, a modo de Progressbar, de las descargas globales. ¿Cómo se consigue ese efecto tan llamativo? Me gustaría implementarlo en el programa que estoy haciendo, si está a mi alcance.

Casimiro Notevi 20-12-2023 17:16:58

En Torry's Delphi hay varias que a lo mejor te sirven.

Neftali [Germán.Estévez] 21-12-2023 09:14:40

Cita:

Empezado por Wellnic (Mensaje 553653)

Cuando el Emule está descargando cosas, su icono en la barra de tareas muestra un gráfico, a modo de Progressbar, de las descargas globales. ¿Cómo se consigue ese efecto tan llamativo? Me gustaría implementarlo en el programa que estoy haciendo, si está a mi alcance.

¿Te refieres al icono junto al reloj, o al propio botón de la aplicación?

El primero debes programarlo utilizando el componente TTrayIcon que viene con Delphi, o si tienes versiones antiguas, con alguno externo, como te ha comentado [Casimiro] antes.
Aquí en la wiki de embarcadero tienes código de ejemplo de cómo utilizarlo.

El segundo está explicado aquí.

Wellnic 21-12-2023 14:13:16

Me refería al botón, al acceso directo del Emule en la barra de tareas,
que se pone en "modo Progressbar" cuando está descargando:



El área verde vertical va cubriendo el icono reflejando el porcentaje de
descargas.

Y... bueno, hace unos días se me puso entre ceja y ceja incluir de algún
modo esta funcionalidad en mi programa... :D

Neftali [Germán.Estévez] 22-12-2023 12:10:23

Coloca en el formulario un componente TTaskbar.
Con código como este, puedes conseguir el efecto que necesitas:


Código Delphi [-]
  Taskbar1.ProgressMaxValue := ProgressBar1.Max;
  Taskbar1.ProgressState := TTaskBarProgressState.Normal;

  for var i:integer := 0 to 99 do begin
    ProgressBar1.Position := i;
    Taskbar1.ProgressValue := i;
    Sleep(60);
    Application.ProcessMessages;
  end;

En un Windows 10 se ve así:


En un Windows 11, así:

Wellnic 22-12-2023 20:53:08

(Queda más guay en Windows 10 :)... Creo que voy a dejar Windows 11 para otro momento :D)

Me parece que Lazarus, el entorno en el que suelo programar, carece de ese componente (o no
he conseguido encontrarlo). En todo caso, voy a seguirle la pista al TTaskbar, a ver a donde me lleva :).

Gracias

Casimiro Notevi 23-12-2023 13:21:26

Con las RX puedes poner el icono animado, por lo que sería posible también.

Wellnic 23-12-2023 16:28:34

¿Las RX se pueden instalar en Lazarus? Creía que no.

Casimiro Notevi 23-12-2023 17:47:26

Sí, además están online, no tienes que buscarlas ni nada, te vas a "Paquetes->Instalar/desinstalar paquetes" y ahí están.
Esta es la versión Linux, que es la que utilizo.


Wellnic 24-12-2023 11:23:55

Me he descargado las RX para Lazarus desde la página de Neftali, pero no compila (dice que faltan
paquetes). Supongo que tendré que instalar la versión más reciente de Lazarus (ahora tengo la 2.0.10).

(¿O están disponibles solo para Linux?)

Casimiro Notevi 24-12-2023 11:28:55

Ya he comentado antes que no tienes que descargar nada, sólo seguir los pasos que te he indicado, se instalan solas y sus dependencias.

Wellnic 24-12-2023 12:13:32

Es verdad... Es que pensaba que te referías al propio Linux...

Wellnic 24-12-2023 18:15:18

Pues va a ser que en las RX no está esa funcionalidad que buscaba. En todo caso...

Felices fiestas :)
||-||:cool::(:o:)v:-)v:(:cool::eek:

Casimiro Notevi 24-12-2023 21:31:28

Cita:

Empezado por Wellnic (Mensaje 553691)
Pues va a ser que en las RX no está esa funcionalidad que buscaba. En todo caso...
Felices fiestas :)


No, eso no lo tiene, lo que decía es que se le puede poner iconos animados, por lo que se podría crear uno que simulara lo que quieres.
Felices fiestas :)

Wellnic 27-12-2023 00:20:15

Pues al final he dado con la manera de poner el icono en modo ProgressBar :D
Dejo aquí el programita que acabo de hacer a salto de mata para hacerme
con su funcionamiento, por si alguien más estuviera interesado.

Código Delphi [-]
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
  Win32TaskbarProgress;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Timer1: TTimer;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;
  c: integer=0;
  td: integer=7851;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
GlobalTaskbarProgress:= TWin7TaskProgressBar.Create;
GlobalTaskbarProgress.Max:= 99;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
C:= (c+ 1) Mod td; Label1.Caption:=IntToStr(c);
GlobalTaskbarProgress.Progress:= Round(99*(c/td));//como el monstruito solo sabe contar hasta 99 hay
                                                  //que procesarle un poco los datos de entrada
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:= not(Timer1.Enabled);
end;

end.

ElKurgan 02-01-2024 11:53:07

Gracias por compartir la solución y feliz 2024 a todos

Saludos

Wellnic 04-01-2024 14:26:42

Cita:

Empezado por ElKurgan (Mensaje 553783)
Gracias por compartir la solución y feliz 2024 a todos

Saludos

Aclarar que GlobalTaskbarProgress.Max sí acepta el límite máximo de lo que se quiere medir.
Y GlobalTaskbarProgress.Progress acepta todos los valores intermedios. No es necesaria la
formulita, Round(99*(c/td)), que me saqué alegremente de la manga :D


La franja horaria es GMT +2. Ahora son las 18:30:59.

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