Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ShellListView mit Thumbnail Vorschau (https://www.delphipraxis.net/1344-shelllistview-mit-thumbnail-vorschau.html)

phlux 15. Nov 2002 20:40


ShellListView mit Thumbnail Vorschau
 
Hi!
Ich wollte mal fragen ob jemand eine Komponente(Freeware) kennt, die ähnlich wie im Explorer eine Thumbnail Vorschau hat, oder vllt sogar besser eine idee wie man das ganze selbst zu einer Kompo basteln könnte.

Christian Seehase 16. Nov 2002 11:16

Moin Phlux,

als Tip kann ich Dir sagen, dass sich die rechte Seite im Explorer aus zwei verschiedenen Teilen zusammensetzt.
Zum einen ein ListView der die Dateien und Verzeichnisse anzeigt, und links davon ein IE, der die Vorschauen anzeigen kann.
Alles links von der äusserst linken Spalte des Listview ist also eine HTML Seite.

Luckie 16. Nov 2002 11:32

Wie?

Christian Seehase 16. Nov 2002 12:20

Moin Luckie,

unmittelbar rechts neben dem Splitter ist ein "Internet Explorer_Server", erst dann kommt der eigentliche SysListView32.
Das ist so wie bei Systemsteuerung\Software, falls Du Dich erinnerst. ;-)

Luckie 16. Nov 2002 12:23

Ah jetzt weiß ich was du meinst. Das Ding ist aber nicht in jeder Ansicht vorhanden. In meiner zum Beispiel nicht. Aber mein Vater hat es in ME so eingestellt. Da wird dann, wenn möglich, die Datei als Miniaturansicht angezeigt und / oder Details zur Datei.

Christian Seehase 16. Nov 2002 12:31

Moin Luckie,

stimmt, man kann's abschalten.
Standardmässig ist es allerdings aktiviert.

Luckie 16. Nov 2002 12:34

Nicht bei einem gescheiten Windows (2000). :mrgreen:

Da ist es umgekehrt, da hab eich es nicht eingeschaltet bekommen. :roll:

phlux 17. Nov 2002 12:39

Ich hab die Spalte bei mir (auch Win 2000) sofort deaktiviert, nimmt die Übersicht und stört mich einfach!
@Christian:Also laut deinen Überlegungen müsste ich also bei den Internet Explorer Komponenten danach suchen, von irgendeiner bestehenden Komponente weißt du nichts?? :(

Christian Seehase 17. Nov 2002 13:13

Moin Phlux,

wie genau das jetzt zu machen wäre, kann ich Dir auch nicht sagen (aber Deine Frage reizt mich das mal in Angriff zu nehmen ;-)).

Der rechte Teil des Explorers besteht eben aus zwei Teilen. Ein wenig IE und ein ListView. Die könnte man dann, z.b., auf ein Panel, legen.
Soll der IE Teil nicht angzeigt werden, wird er einfach auf unsichtbar gesetzt. (nur mal so als Idee).

Mit einer Kompo kann ich leider nicht dienen. Da ich fertige Komponenten nach Möglichkeit meide, schau ich mich auch nur selten danach um.

phlux 17. Nov 2002 13:39

Zitat:

Zitat von Christian Seehase
wie genau das jetzt zu machen wäre, kann ich Dir auch nicht sagen (aber Deine Frage reizt mich das mal in Angriff zu nehmen ;-)).

Falls du dich da dransetzt, sag mir mal bescheid, vllt kann man mal Ideen austauschen (obwohl ich denke das ich dir wahrscheinlich keine große hilfe bin *g)

Zitat:

Der rechte Teil des Explorers besteht eben aus zwei Teilen. Ein wenig IE und ein ListView. Die könnte man dann, z.b., auf ein Panel, legen.
Soll der IE Teil nicht angzeigt werden, wird er einfach auf unsichtbar gesetzt. (nur mal so als Idee).
Ja ist eine recht einfache Lösung, ist wahrscheinlich am wenigsten umstänblich :D

Zitat:

Mit einer Kompo kann ich leider nicht dienen. Da ich fertige Komponenten nach Möglichkeit meide, schau ich mich auch nur selten danach um.
Ahh, auch so ein Selfmade-Mensch :wink:
Fertige Komponenten sind für mich meistens unumgänglich, da ich
a) nicht die Erfahrung dazu habe
b) meisten wenig Zeit
um sie selbst zu schreiben, schau mir aber den SourceCode der Kompos immer mal an, um mehr zu lernen. Auch aus vielen anderen Tuts resultiert jetzt meine momentane Kompo (um den Verz. Inhalt auszulesen) werd die Kompo auch noch bald um Icons für Ordner, bzw. Dateien bereichern.

Christian Seehase 18. Nov 2002 16:43

Moin Phlux,

ich hab' inzwischen mal einen kleinen Ansatz zusammengestoppelt.

Code:
[b]interface[/b]
[b]uses[/b] extctrls,classes,comctrls,shdocvw,controls,dialogs,sysutils;

[b]type[/b]
  TcsExplorerListView = [b]class[/b](TCustomPanel)
  [b]private[/b]
    FListView  : TListView;
    FWebBrowser : TWebBrowser;
  [b]public[/b]
    [b]constructor[/b] Create(AOwner : TComponent); override;
    [b]procedure[/b] CreateWnd; override;
[color=#000080]// ..... hier folgt der Standard von TPanel[/color]


Code:
[b]constructor[/b] TcsExplorerListView.Create(AOwner: TComponent);

[b]begin[/b]
  [b]inherited[/b];
  self.Width      := 600;
  self.Height     := 300;
  FListView       := TListView.Create(self);
  FListView.Parent := self;
  FListView.Align := alRight;
  FWebBrowser     := [b]nil[/b];
[b]end[/b];

[b]procedure[/b] TcsExplorerListView.CreateWnd;
[b]begin[/b]
  [b]inherited[/b] CreateWnd;
  [b]if[/b] [b]not[/b] Assigned(FWebBrowser) [b]then[/b]
  [b]begin[/b]
    FWebBrowser             := TWebbrowser.Create(self);
    FWebBrowser.Align       := alLeft;
    FWebBrowser.ParentWindow := self.Handle;
    FWebBrowser.Height      := self.Height;
[color=#000080]//    FWebBrowser.Navigate('www.delphipraxis.net');[/color]
  [b]end[/b];
[b]end[/b];
Die Methode CreateWnd muss überschrieben werden, da im constructor noch kein Handle der Komponente existiert. Dieses ist aber notwendig, damit der Webbrowser auch zur Entwicklungszeit angezeigt wird.

Was ich bis jetzt allerdings nicht herausbekommen habe:
Wieso funktioniert alLeft beim Webbrowser nicht richtig, wenn er so erzeugt wird?
(Kommentier mal die Zeile "FWebBrowser.Height := self.Height;" aus ;-))

phlux 18. Nov 2002 18:46

Hi Christian!
Hab heute mal versucht deine Kompo bei mir nachzubasteln, dabei ergab sich jedoch folgendes Problem, so wie es scheint hast du wohl die TWebBrowser Kompo der Professional Version genommen, ist ein bisschen blöd, da man so nur einen nutzen von der Kompo hat wenn man eine (teure) Prof.Ver. vorweisen kann (zum Glück hatte ich grad D6 Prof. von meiner Schule zur Hand :) ), besser wäre es auf die ActiveX Kompo wohl umzusteigen. Problem bei der Sache ist jedoch, das ich sobald ich Versuche die Kompo unter D6 zum laufen zu bringen eine lustige Acess Violation erhalte :(

Christian Seehase 18. Nov 2002 20:26

Moin Phlux,

Du müsstest Dir den TWebBrowser selber importieren können über:

Komponente\ActiveX importieren.

Dort dann Microsoft Internet Controls auswählen und dann installieren.

Ich bin mir nur nicht sicher, ob die Kompo dann TWebBrowser oder TWebBrowser_V1 ist.

Da es sich beim WebBrowser um ein OleControl handelt ist es auch möglich, dass dieses anders erzeugt werden muss, als ich das getan habe. Ich versuche das aber noch herauszubekommen.

Wird die WebBrowser Kompo innerhalb der Komponente erzeugt, ist der Owner das Panel. Legt man ein normales Panel auf das Formular, und dann darauf einen WebBrowser so ist der Owner das Formular :shock:
Leider ist mir im Moment nicht so ganz der Zusammenhang klar :?

phlux 18. Nov 2002 20:38

Also, ich habe mir mal bei Akte X gedanken gemacht, ich glaube die einfachste Methode ist es wohl einfach eine normale ListView zu nehmen den Style auf vsIcon zu setzten und dann für LargeImages eine Imagelist zu wählen in die man einfach 128*96 Pixel große Thumbnails einsetzt :o is glaub ich der faule weg, der nich so ambitioniert ist wie deiner ;) , werds aber wohl erstmal damit versuchen.

Christian Seehase 18. Nov 2002 20:55

Moin Phlux,

noch eine Idee dazu:
Wenn's so läuft wie Du es Dir vorstellst, und das Ganze dann erweitern möchtest, könnest Du ja mal versuchen statt eines WebBrowsers für die Anzeige ein TImage zu verwenden.

Bei dem WebBrowser weiss ich im Moment auch noch nicht, wie ich den zur Laufzeit korrekt erzeugen muss.
TWebBrowser.Create scheint jedenfalls einigermassen falsch zu sein :?

Luckie 18. Nov 2002 20:56

Nur gut, dass du kein Dragon Ballz gekuckt hast. :roll:

Christian Seehase 18. Nov 2002 21:10

:?:

Daniel B 18. Nov 2002 21:27

@Luckie, das hab ich jetzt nicht kapiert.
@Christian, das ist eine Zeichentrick Sendung. So ne jap. Manga geschichte, wo sich alle die ganze Zeit verprügeln. Mit Superkräften usw. Dennoch hab ich den zusammenhang nicht verstanden.

Grüsse, Daniel :hi:

Luckie 18. Nov 2002 21:30

Na ja wenn ihm das bei Akte X eingefallen ist, dann können wir froh sein, dass er kein Dragon Ballz gekuckt hat. Wer weiß, was ihm da schreckliches eingefallen wäre. So war das gemeint.

Christian Seehase 18. Nov 2002 21:34

Moin Luckie,

wär' ganz hilfreich gewesen, wenn Du dazugeschrieben hättest, das Du Phlux gemeint hast ;-)
Also ich für meinen Teil hab' WWM gesehen.

Daniel B 18. Nov 2002 21:35

[OT]
 
Ah, jetzet. :mrgreen: :mrgreen: ROTFL. Naja, die Vorstellung ;)

Grüsse, Daniel :hi:

jbg 18. Nov 2002 21:38

Zitat:

Zitat von Christian Seehase
Wieso funktioniert alLeft beim Webbrowser nicht richtig, wenn er so erzeugt wird?

Mit ParentWindow kann die VCL Ausrichtungsroutine nicht wirklich etwas anfangen. Sie benötigt ein TWinControl. Weil TWebBrowser (bzw. IWebBrowser) die Eigenschaft Parent neu deklariert, hat man auch keinen Zugriff auf die von TOleControl geerbte Eigenschaft Parent.

Folgender Code kommt auch ohne CreateWnd aus.
Delphi-Quellcode:
uses OleCtrls;

constructor TcsExplorerListView.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Width := 600;
  Height := 300;
  FListView := TListView.Create(Self);
  FListView.Parent := Self;
  FListView.Align := alClient;

  FWebBrowser := TWebbrowser.Create(Self);
  TOleControl(FWebBrowser).Parent := Self;
  FWebBrowser.Align := alLeft;
end;

Luckie 18. Nov 2002 21:53

Zitat:

Zitat von Christian Seehase
Moin Luckie,

wär' ganz hilfreich gewesen, wenn Du dazugeschrieben hättest, das Du Phlux gemeint hast ;-)
Also ich für meinen Teil hab' WWM gesehen.

Sorry, du hast dazwischen gefunkt. Als ich gepostet habe, war deines noch nicht da.
Also bei dem HD habe ich eigentlich sofort an was wohl gedacht? Richtig, an Disketten und die Bedeutung dort: High Density. :wink:

Christian Seehase 18. Nov 2002 22:01

Moin jbg,

danke.
Prima so geht's :D

Das Parent zu IDispatch geworden ist hatte ich zwar schon mitbekommen, allerdings hab' ich bislang noch nie mit OleControl gearbeitet.
Wird wohl mal Zeit ;-)

@Luckie:
Da war mich mir nicht ganz sicher. Heavy Duty kam mir irgendwie auch bekannt vor. Ich hätt' vielleicht aber noch den 50:50 gehabt ;-)

phlux 19. Nov 2002 14:38

Jo, aber warhscheinlich hätte ich mit nem "Laser" auf dem Kopf schon längst "...eine Million Dollar..." bekommen....

Zitat:

Zitat von Luckie
Nur gut, dass du kein Dragon Ballz gekuckt hast. :roll:

:o was soll das denn jetzt heißen, DBZ ist nicht schlecht, nur weil es die ganzen kleinen Kinder gucken, ich habe es sogar geschafft meinen damaligen 18 jährigen Cousin für Pokemon zu begeistern (mit dem Hinweis, das zu der zeit Pkmn noch niemand in D kannte :wink: ).

So genug OffTopic, also ich bin dafür das du Christian das ganze doch noch mal mit der WebBrowser Kompo versuchst, wenn du Zeit hast ;) (ist ja nicht jeder so ein fauler Abiturient wie ich) und ich widme mich meinem nahezu genialen :lol: Einfall mit der ListView.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz