Deutsch
Forum

Ordner in Listview einlesen?

 
- Seite 1 -



Hans-Jürgen
Trog
Hallo,

ich habe ein Imagelist (s. Große-Bitmap-Icons.prf von Frank) angelegt, um die Bilder eines Ordners anzeigen zu lassen. Dazu sollen nun aber auch die Dateinamen angezeigt werden. Meine Fragen dazu:

1. wie kann ich die Dateien eines Ordners in das Listview einlesen? Nach Möglichkeit automatisch.
2. gleichzeitig sollen dazu auch die Minibilder angezeigt werden.
3. Ist es möglich, bei z.B. 3 Spalten auch die einzelnen Zellen anzuklicken? D.h., daß ich als Rückgabe auf ein Bild bzw. dessen Dateinamens als Rückgabe diesen Dateinamen erhalte. Also z.B. in der 3. Zeile das 2. Bild anklicken usw.

Viele Grüße
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
20.07.2008  
 



 
- Seite 1 -



Thomas
Freier
Wenns denn eine Bildvorschau mit der Listview sein soll, werden hiermit alle Fragen beantwortet?
 {$iq}
Declare lvdll&,listview&,text$,x&,y&,z&,ilist&
Declare bild&[199]
Declare bereich#
Dim bereich#,512
Def GetSysColor(1) !"USER32","GetSysColor"
 $I Listview_Funktionen.inc
lvdll&=usedll("Listview.dll")
Windowtitle "Unbegrenzt grosse Bilder in Listviews einbauen"
Windowstyle 26+512
Window 0,0-640,600
Cls GetSysColor(15)
Def ImageList_Create(5) !"comctl32.dll","ImageList_Create"
Def ImageList_Destroy(1) !"comctl32.dll","ImageList_Destroy"
Def ImageList_Add(3) !"comctl32.dll","ImageList_Add"
Usefont "MS Sans Serif",10,0,0,0,0
SetDialogFont 1
Profan-interne Listbox füllen
Bilder in die Listbox
var Pfad$ = @GetDir$("@")
ClearList
ChDir Pfad$ + "\lvdata"
AddFiles "*.JPG"
ChDir Pfad$
Gewünsche Bildgrösse für dieses Demo skaliert: 30 x 30 Pixel
ilist&=ImageList_Create(30,30,33,0,0)
listview&=CreateListView(%hwnd,%hinstance,0,GetSysColor(24),-1,$23)
SetImageList(listview&,ilist&)
x& = 1 + ((1+%GetCount) / 2)  Anzahl der erforderlichen Zeilen bei 2 Spalten
BuildListview(listview&,2,x&,280,0)
text$="Spalte 1"
SetColumnName(listview&,Addr(text$),0)
text$="Spalte 2"
SetColumnName(listview&,Addr(text$),1)
Declare Nr%
Nr%= 0
x& = 0  Zeile

While Nr% < %GetCount   Anzahl der Bilder in der Listbox

    y& = 0  Spalte

    While y& < 2

        text$= Pfad$ + "\lvdata\" + @ListBoxItem$(Nr%)
        bild&[Nr%] = Create("hSizedPic", -1,text$, 30, 30, 1)
        ImageList_Add(ilist&,bild&[Nr%],0)
        text$= "  " + @ListBoxItem$(Nr%)
        SetItemText(listview&,addr(text$),y&,x&)
        SetIconColumn(y&)
        SetIcon(listview&,x&,Nr%)
        DeleteObject bild&[Nr%]
        inc y&
        inc Nr%
        Case nr% > %GetCount : BREAK

    EndWhile

    inc x&

EndWhile

ShowListView(listview&,8,8,612,304)
text$="Registriert alle Mausklicks (links, rechts, Doppelklick) auf einen Itemtext.
"
text$=text$+"Auch linke und rechte Mausklicks auf Spaltenbuttens werden registriert."
var status&=Create("TEXT",%HWND,text$,8,464,600,72)
InitMessages(%hwnd)

While 1

    waitinput
    Case %key=2:BREAK
    y&=GetControlParas(bereich#)

    If y&=2

        text$="Der rechte Mausknopf wurde in Spalte "+Str$(Long(bereich#,4))+" / "+Str$(Long(bereich#,8))+" gedrückt.
        "
        SetText status&,text$

    ElseIf y&=1

        text$="Der linke Mausknopf wurde in Spalte "+Str$(Long(bereich#,4))+" / "+Str$(Long(bereich#,8))+" als Doppelklick gedrückt.
        "
        SetText status&,text$

    ElseIf y&=3

        text$="Der linke Mausknopf wurde in Spalte "+Str$(Long(bereich#,4))+" / "+Str$(Long(bereich#,8))+" gedrückt.
        "
        SetText status&,text$
        GetItemText(listview&,bereich#,Str$(Long(bereich#,4)),Str$(Long(bereich#,8)))
        text$=trim$(String$(bereich#,0))
        MessageBox "Mit Linksklick könnte das Bild
        "+ text$ +"
        in Originalgröße angezeigt werden...","Information",$40040

    EndIf

EndWhile

Dispose bereich#
ImageList_Destroy(ilist&)
DestroyWindow(%hwnd)
freedll lvdll&
End

21 Uhr einen Bilderordner gestestet. Es kommt zu einer Fehlanzeige und der Aufbau dauert ewig.

Kommt das Beispiel von "Pascal" in Frage?
LoadFile-Dialog mit Bitmap-Anzeige (ab Windows 2000 / XP)
(C) Uwe "Pascal" Niemeier
window 10,10-700,500
 $H Messages.ph
 $H Windows.ph

proc OpenFileHook-------------------------------OpenFileHook----------------------------

    parameters dlg&,msg&,wparam&,lparam&
    case Status%:return 1-----Ansicht muss nur einmal angepasst werden
    casenot msg&=~WM_NOTIFY:return 1

    if long(lparam&,8)=-603---Bei Init existieren DefView und LV noch nicht!

        Status%=1
        DefView&=~FindWindowEx(~GetParent(dlg&),0,"SHELLDLL_DefView","")
        sendmessage(DefView&,~WM_COMMAND,$702D,0)--Undokumentierte Message

    endif

    return 1
    endproc---------------------------------------------------------------------------------

    proc LoadPicDialog------------------------------LoadPicDialog---------------------------

        parameters Pfad$,Titel$,Name$
        declare ofn#,Result$,Result&
        declare DefView&,Status%------Variablen für Hook
        Name$=Name$+"z*.bmp;*.jpe;*.jpeg;*.jpg;*.gifzz"--Filter (bei Bedarf anpassen)
        dim ofn#,88+256---------------Struktur (Win2000/NT/XP) + Puffer
        clear ofn#
        long ofn#,0=88----------------Grösse Struktur für GetOpenFileName (76 für Win9x)
        long ofn#,4=%hwnd-------------übergeordnetes Fenster
        long ofn#,12=addr(Name$)------Filter/Typ
        long ofn#,28=ofn#+88----------Beginn Puffer
        long ofn#,32=255--------------Puffergrösse
        long ofn#,44=addr(Pfad$)------Anfangspfad
        long ofn#,48=addr(Titel$)-----Titel
        long ofn#,52=$880024----------Flags
        long ofn#,68=procaddr("OpenFileHook",4)
        Result&=external("COMDLG32","GetOpenFileNameA",ofn#)
        Result$=string$(ofn#,88)
        casenot Result&:Result$=""
        procaddr("OpenFileHook",-4)
        dispose ofn#
        return Result$
        endproc---------------------------------------------------------------------------------
        print LoadPicDialog("","Bitte Bild wählen","Bild")
        waitkey
 
Gruß Thomas
Windows XP SP2, XProfan X2
20.07.2008  
 




Hans-Jürgen
Trog
Hallo Thomas,

der Code von Pasqal ist prima. Läuft

in der Zeile
long ofn#,68=procaddr("OpenFileHook",4)
habe ich rausgefunden, daß die 4 = mit Bild und die 0 = ohne Bild(Liste) bedeutet.

Weißt Du viell., ob man hier die -4 auch ändern muß, wenn man 0 (obere Zeile) einsetzt?
procaddr("OpenFileHook",-4)

Danke
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
21.07.2008  
 



Autsch! Der 2. Param von ProcAddr muss die Anzahl der zu erwartenden Parameter sein - Du darfst hier an der 4 nichts ändern...

Was Du beobachtet hast ist eine Fehlfunktion, also nur scheinbar richtiges Ergebnis wegen falscher Ursache.
 
21.07.2008  
 




Hans-Jürgen
Trog
Hallo iF,

ok, aber wie bzw. was könnte man übergeben, um z.B. per Menüpunkt zwischen den beiden Varianten wählen zu können? Oder geht das nicht?

Danke
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
21.07.2008  
 



Was genau?
 
21.07.2008  
 




Hans-Jürgen
Trog
ich meine den Code von Pasqal (oben) mit dem Loadfile-Dialog. In der Form wird der Dialog mit Miniaturansichten geöffnet. Eigentlich genau so, wie ich es mir wünschte. Aber viell. kann man ihn auch in der Listenansicht öffnen?
Wenn ja, dann könnte ich in meinem Progrämmchen wählen lassen, ob mit Miniaturen oder ob als Liste der Dialog erscheint.

Ich hatte ja gedacht, dass das mit der "4" bzw. "0" bewirkt wird. Leider ja falsch gedacht

Gruß
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
21.07.2008  
 




Hans-Jürgen
Trog
ich habs mit googlen gefunden: [...] 

Dort werden die Messages dafür gezeigt und es klappt prima!!

Gruß
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
21.07.2008  
 



Musst nur den Sendmessage ändern bzw. mit diesen Konstanten füttern:

Wie Du siehst verwendet Pascal hier $702D also SHVIEW_THUMBNAIL.

Ah, warst ne Sekunde schneller...
 
21.07.2008  
 




Hans-Jürgen
Trog
Hallo iF,

nur mal ne Frage, die mit diesem bisherigen nur nebenbei zu tuen hat. Im RGH-Forum habe ich an Andreas Miethe diese Frage gestellt: [...] 

Ich weiß nicht, ob er Urlaub hat oder hoffentlich nicht krank ist.

Der Code läuft im Hauptfenster (%hwnd). Ich habe schon viel probiert, bekomme aber die Aktionen nicht auf ein Fenster/Dialog, das z.B. mit @Create("Window",N,S,X1,Y1,X2,Y2) erzeugt wurde.

Kannst Du das anpassen?

Würde mich sehr freuen.

Danke
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
21.07.2008  
 



 
- Seite 2 -


Kann ich, mache ich aber nicht, denn es ist zum Glück nicht nötig.

Es gibt eben genau zur Vereinfachung solcher Spaghettitexte das Folgende:  [...] 

Schaue Dir auch unbedingt die Beispiel-Exen an.

Wenn Du mit der Syntax der Quelltexte im Paket nicht klarkommst (setze XPSE  [...]  ein), dann gib Bescheid!

Auf jeden Fall ist Dein Code damit aber kompakter und auch leichter verständlich, und Du musst Dich nicht um Probleme kümmern die darin bereits schon erledigt sind.

Hans-Jürgen Trog
Hallo iF,
...
Ich weiß nicht, ob er Urlaub hat oder hoffentlich nicht krank ist.



Frag ihn einfach!  [...]  (aber wenn ich mir den Code ansehe hätte ich auch keine Lust) (drum gibts ja die scrollcontrol-include)

[offtopic]
Solche Codes  [...]  besser auf  [...]  ablegen und in den Foren nur den Link. Das hat den Vorteil das die Codes "heile" bleiben - was leider im Phorum von Roland nicht immer der Fall ist.
[/offtopic]
 
21.07.2008  
 




Hans-Jürgen
Trog
iF, Du hast es geahnt Mit dem Code komme ich nicht klar. Außerdem ist dort das Scrollen zwar sehr schön, aber nicht z.B. das Ausschneiden usw. Ich müßte da ja alles ändern (

Bei dem Code von Andreas kommt es ja nur auf die Umstellung der SubClass-Prozedur an, damit diese Aktionen in einem Fenster laufen: Rechteck ausschneiden, Scrollen, Laufbalken, Tastatur z.B. zum zoomen, Bilddarstellung.

Muß mir wohl ne andere Lösung überlegen.

Gruß
Hans-Jürgen
 
Windows-Tablet mit Win11, XProfan X4
22.07.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

16.602 Betrachtungen

Unbenanntvor 0 min.
Alibre28.01.2021
Thomas Zielinski22.10.2020
p.specht13.02.2019
Michael W.07.07.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie