Thumbnail Viewer Komponente

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

bembulak hat geschrieben:bitte weiter dran arbeiten!


Was fehlt denn?
Schneller kann ich es nicht mehr machen, die FPC-Reader geben das nicht her.
Du kannst noch
FreeInvisibleImages:=false;
sezten, dann hast du eine Art Cache.
Das braucht nat. mehr Speicher, dafür muss beim auf- und ab-Scrollen nicht immer neu geladen werden.

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 »

Was fehlt denn?

Ist natürlich beta

Ich dachte nur, weil du gesagt hast, es sei noch beta, dass vielleicht da und dort noch einige Punkte sind, die noch offen sind.
Ansonsten: perfekt!

Schneller kann ich es nicht mehr machen, die FPC-Reader geben das nicht her.

Akzeptiert! ;)

Danke nochmals.

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

bembulak hat geschrieben:Ich dachte nur, weil du gesagt hast, es sei noch beta, dass vielleicht da und dort noch einige Punkte sind, die noch offen sind.
Ansonsten: perfekt!


Naja, beta war es, weil es ausser mir noch keiner getestet hatte.
Da in den vergangenen Monaten nichts Wesentliches bemängelt wurde, erkläre ich die gleiche Version hiermit zur 1.0 ;-)

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Was für Bild Formate werden Eigentlich unterstützt ? Ist unter anderem PNG und ICON ?

Ich hatte mal ein recht Großes Verzeichnis mit ICONS. Da hatte Windows Schlapp gemacht. Unter Linux war es auch keine Große Freude da drin zu wühlen.
Daher die Frage. Ich habe gehört, dass es auch Möglich ist in einem ICON mehrere Bilder unter zu bringen, wird das auch unterstützt ?

Klingt so weit ganz Interessant. Vielleicht Probiere ich es mal bei Gelegenheit aus.
MFG
Michael Springwald

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

pluto hat geschrieben:Was für Bild Formate werden Eigentlich unterstützt ?

Die, welche fpimage als ImageHandler registriert hat. Z. Zt sind das:
*.bmp;*.png;*.pnm;*.pgm;*.pbm;*.pbm;*.jpg;*.jpeg;*.gif;*.psd;*.pdd;*.pcx;*.tga;

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Nur mal angenommen: Könnte man ein Schalter einbauen in die Komponente, so das es möglich wird, zu Entscheiden ob z.b. OpBitmap genutzt werden soll oder nicht ?
MFG
Michael Springwald

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

pluto hat geschrieben:Nur mal angenommen: Könnte man ein Schalter einbauen in die Komponente, so das es möglich wird, zu Entscheiden ob z.b. OpBitmap genutzt werden soll oder nicht ?


Du kannst damit machen was du willst. Deine eigene Ladeliste und deine eigenen Ladeverfahren.
Siehe: viewtopic.php?p=38892#p38892

Siehe
ThumbControl1.URLList :=
und Property OnLoadFile

Ausserdem hast du den Quelltext. Wenn du es anders haben möchtest, dann ändere es doch einfach. Ich mache das ganze jetzt nicht komplizierter als nötig.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Ausserdem hast du den Quelltext. Wenn du es anders haben möchtest, dann ändere es doch einfach. Ich mache das ganze jetzt nicht komplizierter als nötig.

Ich dachte es nur als Vorschlag und natürlich als nette Erweiterung. Ob ich das mache, weiß ich noch nicht. Da ich zur Zeit andere Spannende Projekte habe.
MFG
Michael Springwald

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

Kleines Bugfix-Update:

- Probleme mit neuer LCL Version bezüglich Transparenz sind behoben.
- Probleme beim schnellen Verzeichniswechsel (bevor sichtbare Bilder geladen waren) führte u.U. zu Zugriffsverletzungen im Multithread-Modus.
Dieses Problem sollte nun abgefangen sein.

http://www.theo.ch/lazarus/thumbview.zip

Benutzer der Komponente müssen nur die Dateien ersetzen. Die IDE-Integration ist unverändert, sodass Lazarus nicht neu gebaut werden muss.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Schön wäre ein kleines Beispiel.
Ich habe mal folgenden Code erstellt:

Code: Alles auswählen

 
procedure TForm1.FormCreate(Sender: TObject);
var
  i:integer;
begin
  ThumbControl:=TThumbControl.Create(Self);
  ThumbControl.Align:=alClient;
  ThumbControl.Parent:=self;
  for i:=0 to FileListBox1.Items.Count-1 do begin
    if i = 30 then exit;
    writeln(FileListBox1.Directory+DirectorySeparator+FileListBox1.Items[i]);
    ThumbControl.ImageLoaderManager.AddImage(FileListBox1.Directory+DirectorySeparator+FileListBox1.Items[i])
  end;
  ThumbControl.ImageLoaderManager.LoadAll;
end;     
 

Ich sehe nur ein Objekt nach dem Starten. Und noch was:
Wenn ich das Maus-Rad bewege werden Scrollbalken eingeblendet.

Edit01: Ich habe gerade gesehen, dass man nur das Verzeichnis setzten muss. Und schon geht es.
MFG
Michael Springwald

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

Ich weiss jetzt gerade nicht, was du da machst, aber du kannst die Komponente in der IDE installieren.
Sie erscheint dann unter dem "Misc" Tab.
Dann sollte sich solche Probleme von alleine lösen.
Für schnelles Scrolling Property "Multithreaded" auf true setzen

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Nun ich meinte: Wenn es nicht genügend Einträge gibt in der Komponente, werden Scrollbalken sichtbar, wenn man das Mausrad benutzt.

Ich verwende sie, ohne sie zu Installieren, ist einfach einfacher, als erst mal Lazarus neu zu bauen.

Ich finde die Komponente nicht schlecht. Auch die Thread Unterstützung gefällt mir.
MFG
Michael Springwald

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

Re: Thumbnail Viewer Komponente

Beitrag von theo »

pluto hat geschrieben:Nun ich meinte: Wenn es nicht genügend Einträge gibt in der Komponente, werden Scrollbalken sichtbar, wenn man das Mausrad benutzt.


Kann sein, ist aber nicht so das ganz grosse Problem, oder?
Habe im Moment wenig Zeit. Findest du raus woran das liegt? Schau vllt. mal in "scrollingcontrol.pas" nach.

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Kann sein, ist aber nicht so das ganz grosse Problem, oder?

Ne, ist nur ein kleines Problem. Wollte es auch nur erwähnen.

Habe im Moment wenig Zeit. Findest du raus woran das liegt?

Ich kann mir mal den Code noch mal anschauen. Vielleicht fällt mir was auf.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Thumbnail Viewer Komponente

Beitrag von pluto »

Das Problem ist in "TScrollingControl.VScroll"
du prüft nicht, ob überhaupt gescrollt werden muss. Sondern Scrolleinfach und blendest Dabei die Balken ein.

Edit01: Wenn ich ein "if not CanShowV then exit; " mache, geht es so wie gewollt.

Edit02:

Code: Alles auswählen

 
procedure TScrollingControl.VScroll(var Msg: TWMScroll);
var si: TScrollInfo;
var newPos: Longint;
begin
  if CanShowV then begin
    {$IFDEF LCLqt}
      newpos := Msg.Pos;
    {$ELSE}
      ZeroMemory(@si, sizeof(si));
      si.cbSize := sizeof(si);
      si.fMask := SIF_TRACKPOS; //MSDN against 65k limit
    {$IFDEF LCLGtk2}
    newpos := Msg.Pos;
    {$ELSE}
    if GetScrollInfo(Handle, SB_VERT, si) then newPos := si.nTrackPos else  newpos := Msg.Pos;
    {$ENDIF}
  {$ENDIF}
 
    case Msg.ScrollCode of
      SB_THUMBPOSITION,
        SB_THUMBTRACK:
        begin
          SetVScrollPos(NewPos);
        end;
      SB_LINEDOWN: SetVScrollPos(FVScrollInfo.nPos + fSmallStep);
      SB_PAGEDOWN: SetVScrollPos(FVScrollInfo.nPos + fLargeStep);
      SB_LINEUP: SetVScrollPos(FVScrollInfo.nPos - fSmallStep);
      SB_PAGEUP: SetVScrollPos(FVScrollInfo.nPos - fLargeStep);
      SB_TOP: SetVScrollPos(0);
      SB_BOTTOM: SetVScrollPos(FVScrollInfo.nMax);
    end;
  end;
end;
 
MFG
Michael Springwald

Antworten