| |
|
|
- 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 |
|
|
| |
|
|
|
| |
|
- 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
|
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| 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. |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
|
| |
|
| |
|
|
|
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 |
|
|
| |
|
|
|
Hans-Jürgen Trog | ich habs mit googlen gefunden: [...]
Dort werden die Messages dafür gezeigt und es klappt prima!!
Gruß Hans-Jürgen |
|
|
| |
|
|
|
| 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... |
|
|
| |
|
|
|
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 |
|
|
| |
|
|
| |
|
- 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] |
|
|
| |
|
|
|
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 |
|
|
| |
|
|