Thumbnail Viewer Komponente

Zur Vorstellung von Komponenten und Units für Lazarus
Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Thumbnail Viewer Komponente

Beitrag von theo »

Wenn jemand eine ziemlich schnelle Thumbnail Viewer Komponente brauchen kann, stelle ich den Code gerne zur Verfügung.

Features:
- Multithread Option.
- Verschiedene View Modi: Horizontal, Vertikal, Grid, und Automatik sowie Auto-Resize Modi.
- OnSelect Ereignis
- etc..

Im Anhang sieht man den Grid Mode.

Ich habe mir Mühe gegeben und einige Tricks angewendet um das Laden und Resizen so schnell als möglich zu machen.
Wenn das jemand haben möchte, soll er sich einfach melden.
Dateianhänge
thumbcomp.png

ccmueller
Beiträge: 10
Registriert: Sa 7. Feb 2009, 14:28

Re: Thumbnail Viewer Komponente

Beitrag von ccmueller »

Ich habe Interesse

Vielen Dank im Voraus
Carsten

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

ccmueller hat geschrieben:Ich habe Interesse


OK. Ist natürlich beta und du wärst der Erste ausser mir, der das testet.
Hier
http://www.theo.ch/lazarus/thumbview.zip

thumbctrl.lpk installieren und IDE neu bauen.
Dann verwenden wie andere Komponenten.

Für mehr "Flüssigkeit" das property Multithreaded auf true setzen.
Property Directory auf das Zielverzeichnis und los geht's.
Den Rest siehst du dann durch ausprobieren, oder frag mich.

Ach so, die Komponente erscheint im Misc Tab.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Thumbnail Viewer Komponente

Beitrag von Socke »

Für ein anderes Projekt brauch ich auch so etwas, aber dann muss ich das nicht selber schreiben :P
ccmueller hat geschrieben:Ich habe Interesse
/sign
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

creed steiger
Beiträge: 957
Registriert: Mo 11. Sep 2006, 22:56

Re: Thumbnail Viewer Komponente

Beitrag von creed steiger »

Ich habs mal kurz mit 233 Bildern unter Qt,GTK2 und GTK probiert.
Schaut wirklich sehr schick aus und die Geschwindigkeit ist saugut (für meine lahmen IDE-Platten ;))
(Unter GTK kommen keine Bilder,nungut es stirbt halt langsam.)

Klasse Sache.(naja,bei dir nicht anders zu erwarten ;))

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

creed steiger hat geschrieben:Ich habs mal kurz mit 233 Bildern unter Qt,GTK2 und GTK probiert.
Schaut wirklich sehr schick aus und die Geschwindigkeit ist saugut (für meine lahmen IDE-Platten ;))
(Unter GTK kommen keine Bilder,nungut es stirbt halt langsam.)

Klasse Sache.(naja,bei dir nicht anders zu erwarten ;))


Danke :D

Technische Detail zu den "Tricks":
- Multi Threading: hält das Scrolling flüssig.
- JPEG Scaling: hält vielleicht Einzug in die FCL: http://bugs.freepascal.org/view.php?id=16748
- Für die anderen Formate: qualitativ schlechtes, aber sehr schnelles Resizing auf eine "Zwischengrösse", danach feines Resampling auf dem kleineren Bild für die Endgrösse.

Auf GTK1 hab ich's nicht getestet. Es gibt aber keinen plattformabhängigen Code da drin, also nicht mein Problem.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

Achso, hatte noch einen englischen Text verfasst, aber vorhin vergessen beizulegen.
Also hier nachgeliefert:

Thumbnail Component:

Features:
- Fast JPEG loading, fast resizing.
- Different layout modes.
- Multithreading option.
- PictureFrame option.
- Caption option.


Some properties explained:

property MultiThreaded:
If you set this to true, the images will be loaded in the "background" not blocking the application.
Warning: The debugger GDB may not like this setting.

property ShowCaptions:
Show/Hide the filename captions.

property ShowPictureFrame:
Show/Hide picture Frame;

property Layout:
Different modes, basically horizontal, vertical and grid plus autosize and auto layout modes, depending on the size of the control

property FreeInvisibleImages:
Do not keep in memory the bitmaps that are currently invisble. (Slower but less resource hungry).

property OnSelectItem:
Event triggered when a thumbnail is clicked or selected using the enter key.

property OnLoadFile:
Event when image stream data is required. Useful for loading data via http, ftp etc.
Warning: if MultiThreaded=true, this happens in a separate thread context.

Installation:
Install "thumbctrl.lpk" -> "TThumbControl" in the "Misc" tab
Zuletzt geändert von theo am Fr 25. Jun 2010, 01:18, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

Und noch eine Information:
Wenn jemand Daten via HTTP oder Datenbank oder was-weiss-ich laden möchte, kann man das so anstellen:
Beispiel für HTTP mit Synapse:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
    ThumbControl1.Directory := '';
end;
 
procedure TForm1.FormShow(Sender: TObject);
begin
  with TStringList.Create do
  begin
    Add('http://wiki.lazarus.freepascal.org/images/thumb/0/0a/Lazarus-0.9.28-linux-gtk2.png/144px-Lazarus-0.9.28-linux-gtk2.png');
    Add('http://www.lazarus.freepascal.org/splash_logo.png');
    Add('http://wiki.lazarus.freepascal.org/images/thumb/0/07/Windows_Vista2.png/144px-Windows_Vista2.png');
    ThumbControl1.URLList := Text;
    Free;
  end;
end;
 
procedure TForm1.ThumbControl1LoadFile(Sender: TObject; URL: string; out Stream:
  TStream);
begin
  if Pos('http://', LowerCase(TrimLeft(URL))) = 1 then
  begin
    Stream := TMemoryStream.Create;
    HttpGetBinary(URL, Stream);
  end;
end;

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Thumbnail Viewer Komponente

Beitrag von bembulak »

Ja, ich habe Interesse! Super und vielen Dank erstmal dafür! Das kommt mir wie gerufen!!! (Mann, ich bin so aus dem Häuschen, ich kann's euch gar nicht sagen)

Leider habe ich beim Installieren Probleme:
Lazarus IDE hat geschrieben:Das Package "thumbctrl 0.0" konnte nicht kompiliert werden.
Aus der Installationsliste nehmen? JA / Übergehen

Nachrichten... hat geschrieben:E:\thumbview\thumbcontrol.pas(65,20) Error: There is no method in an ancestor class to be overridden: "class TThumbControl.GetControlClassDefaultSize:<record type>;"
E:\thumbview\thumbcontrol.pas(172,1) Fatal: There were 1 errors compiling module, stopping


System:
Windows XP 32 bit SP 3 mit allen aktuellen Patches und Updates.
Lazarus: 0.9.28.2 Beta
2009-10-25
FPC: 2.2.4
SVN-Rev: 22279

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

bembulak hat geschrieben:Leider habe ich beim Installieren Probleme:


Lösche dort einfach das Wörtchen "override".
Ist auf 0.9.29 SVN entwickelt, ich habe gar kein 0.9.28.x installiert.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Thumbnail Viewer Komponente

Beitrag von bembulak »

Da ich mit 0.9.28.2 nur Probleme bekam (fpreadpsd, fpreadgif,... fehlen), habe ich auf 0.9.29 ein Update gemacht (bzw. neu installier aus nem Snapshot der Toolbox). Jetzt funktioniert's!
Vielen Dank für die tolle Arbeit und die geile Komponente!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

bembulak hat geschrieben:Da ich mit 0.9.28.2 nur Probleme bekam (fpreadpsd, fpreadgif,... fehlen), habe ich auf 0.9.29 ein Update gemacht (bzw. neu installier aus nem Snapshot der Toolbox). Jetzt funktioniert's!
Vielen Dank für die tolle Arbeit und die geile Komponente!


Das liegt wiederum an der FPC Version. Diese Units sind neuer in der FCL.
Naja, Hauptsache es klappt jetzt.
Sonst kannst du diese Sachen oft auch einfach auskommentieren.
Es wäre nichts weiter passiert, ausser das psd und gif nicht zur Verfügung gestanden wären.

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Thumbnail Viewer Komponente

Beitrag von bembulak »

Hi!

Die Komponente ist für mich immer noch sehr interessant!
Wird daran noch weiter entwickelt? Dann hätte ich einen Vorschlag:

Support für das Mausrad. Srcollen per Mausrad funktioniert hier bei mir (Win XP SP3, Laz: 0.9.29) leider nicht.
Das wäre noch ganz groß!

Danke!

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Re: Thumbnail Viewer Komponente

Beitrag von theo »

Hmm, ich dachte auf GTK2 geht das auch so. Bin allerdings meistens auf dem Notebook und habe dort das Mousewheel Zeug ausgeschaltet.

Probier mal das: in unit scrollingcontrol

bei TScrollingControl im Bereich interface unter "protected" schreibe:

Code: Alles auswählen

function DoMouseWheel(Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint): Boolean; override;


Dann irgendwo im implementation Bereich:

Code: Alles auswählen

function TScrollingControl.DoMouseWheel(Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint): Boolean;
begin
  SetVScrollPos(VScrollInfo.nPos - WheelDelta);
end;


Geht dann was auf Windows (Vertikal) ?

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Re: Thumbnail Viewer Komponente

Beitrag von bembulak »

Geht dann was auf Windows (Vertikal) ?

Ja, es funktioniert jetzt. Ich hatte da wohl was vermurkst beim ersten Test, aber jetzt läuft es.
Bei den großen Bildern meiner DSLR kommt es zwar trotz

Code: Alles auswählen

MultiThreading:= True;
immer noch zu teilweise argen Verzögerungen, aber trotzdem ist diese Komponente sehr, sehr wertvvoll!
Danke also nochmals - bitte weiter dran arbeiten!

Antworten