PDA

Ver la Versión Completa : Icono de progreso del Emule


Wellnic
20-12-2023, 16:47:13
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 (https://torry.net/quicksearchd.php?String=progress&Title=Yes) hay varias que a lo mejor te sirven.

Neftali [Germán.Estévez]
21-12-2023, 09:14:40
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 (http://docwiki.embarcadero.com/CodeExamples/Alexandria/en/TTrayIcon_(Delphi)) de cómo utilizarlo.

El segundo está explicado aquí (https://blog.marcocantu.com/blog/2014-september-vcl-xe7-taskbar-jumplist.html).
http://blog.marcocantu.com/images/forblog/xe7vcl_taskbar2.png

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:

http://imgfz.com/i/zr1j0ug.png

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 (https://docwiki.embarcadero.com/Libraries/Alexandria/en/Vcl.Taskbar.TTaskbar).
Con código como este, puedes conseguir el efecto que necesitas:


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í:
https://i.imgur.com/4dN8v9g.gif

En un Windows 11, así:
https://i.imgur.com/sBlqr2i.gif

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.

https://i.imgur.com/5vPIdKc.jpg

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

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,
Win32TaskbarProgress (https://github.com/Alexey-T/Win32TaskbarProgress/blob/master/win32taskbarprogress.pas);

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