Bilderliste - Lazarus

Für Fragen von Einsteigern und Programmieranfängern...
Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Bilderliste - Lazarus

Beitrag von Have a nice Day »

Guten Abend,
Seit nun ca. einer Woche arbeite ich an einem Lazarus Programm.
Nun wollte ich ein Element einbauen das aussieht wie wenn man den Windows Explorer aus "große Symbole" einstellt.
Es sollen also Bilder nebeneinander stehen mit einer Schrift darunter.
Ich habe versucht dies mit dem Objekt "TListView" zu lösen aber das Objekt leider nicht verstanden.

Ich höffe ihr könnt mir helfen,
T. B.

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Bilderliste - Lazarus

Beitrag von MAC »

TListView ist dafür da um mehrere gleichgroße Bilder im Speicher zu behalten.
Für deine Fälle eher weniger geeignet.
Versuchs einfach mit mehreren TImage oder zeichne alle Bilder auf 1 TImage.

Code: Alles auswählen

Signatur := nil;

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

Re: Bilderliste - Lazarus

Beitrag von theo »

Ich verstehe nicht genau, was das Ding können soll.
Vllt. sowas? www.lazarusforum.de/viewtopic.php?f=29&t=3929

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

Erstmal danke für eure Hilfe :)

@MAC: Das hatte ich mir erst auch so überlegt, aber da ich insgesamt so um die 106 Bilder habe wäre das viel Arbeit.

@Theo: genau das meine ich :D
danke für den link.
habe sowas leider nicht gefunden, sonst hätte ich nicht gefragt.

Schönen Tag euch ;)
T. B.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Bilderliste - Lazarus

Beitrag von mschnell »

Have a nice Day hat geschrieben:aber da ich insgesamt so um die 106 Bilder habe wäre das viel Arbeit.
Man kann jede visuelle Komponente (wie TImage) auch programmatisch erzeugen, platzieren und darstellen. Mache eine ordentliche Schleife über die 106 Bilder und alles wird gut. Bei deutlich über zwei sehr ähnlichen Komponenten sollte man immer so arbeiten.

-Michael

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

Re: Bilderliste - Lazarus

Beitrag von creed steiger »

Virtual treeview wäre auch eine Möglichkeit.

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

Ich erkläre nochmal genauer was ich machen will.

Ich habe insgesamt 106 Bilder.
Diese will ich nun in eine Liste machen so das ich 10 Spalten habe und 11 Zeilen.
Jedes Bild soll unter sich ein Namen haben.
Es sollen in der Ansicht nur 5 Zeilen zu sehen sein und halt alle 10 Spalten.
Dann soll man mit einer Scrollbar an der Seite nach unten gehen können.
Auf die einzelnen Bilder soll man drauf klicken können.

Eigentlich genau so wie das Programm von Theo, aber nicht mit so ganz vielen Funktionen.
Ich bekomme darüber irgendwie keinen Überblick (Programmiere mit Lazarus seit 1nem Monat).
Also ehr ein simples Programm :D

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

Re: Bilderliste - Lazarus

Beitrag von pluto »

ganz einfach:
Man nehme eine ScrollBox, und schreibt eine Methode, die die scrollBox mit Pannels füllt. Diese Pannels beinhalten ein Image und ein Label.
Soweit klar?
Das füllen passiert dann Dynamisch. Ich verrate erst mal nur so viel:
Pannel:=TPannel.Create(ScrollBox1);
damit erstellst du Dynamisch Komponenten. Pannel ist in diesen Fall eine Locale Variable von Typ: TPannel.
Das Pannel braucht noch eine Größe und eine Position.
Panel.Widht(könnte Falsch geschrieben sein):=300;
Panel.Height(könnte Falsch geschrieben sein):=300;
panel.Parent:=ScrollBox1;
genau so geht es mit dem TImage und dem TLabel.
Wie liegen die Bilder vor? In einer StringList? in einer TListBox?

Eigentlich müsste es auch mit der Komponente ListView gehen. Aber nur in verbindung mit einer ImageList Komponente, wo du die Bilder drin hast.
MFG
Michael Springwald

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

pluto hat geschrieben:ganz einfach:
Man nehme eine ScrollBox, und schreibt eine Methode, die die scrollBox mit Pannels füllt. Diese Pannels beinhalten ein Image und ein Label.
Soweit klar?
Das füllen passiert dann Dynamisch. Ich verrate erst mal nur so viel:
Pannel:=TPannel.Create(ScrollBox1);
damit erstellst du Dynamisch Komponenten. Pannel ist in diesen Fall eine Locale Variable von Typ: TPannel.
Das Pannel braucht noch eine Größe und eine Position.
Panel.Widht(könnte Falsch geschrieben sein):=300;
Panel.Height(könnte Falsch geschrieben sein):=300;
panel.Parent:=ScrollBox1;
genau so geht es mit dem TImage und dem TLabel.
Wie liegen die Bilder vor? In einer StringList? in einer TListBox?

Eigentlich müsste es auch mit der Komponente ListView gehen. Aber nur in verbindung mit einer ImageList Komponente, wo du die Bilder drin hast.
1. Frage:
Mit Methoden habe ich noch nicht gearbeitet,
kannst du mir erklären wie ich sowas hinbekomme?

2. Frage:
Ich habe einen Ordner mit allen Bildern,
wie bekomme ich die alle in eine Liste?

3. Frage: (hat nicht ganz was mit der anderen Frage zu tun)
Kann man Objekte in der Form ausblenden, also beim Erstellen.
Weil ich hab da schon viele Objekte und das wir bei mir alles ein wenig unübersichtlich

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

Re: Bilderliste - Lazarus

Beitrag von pluto »

1. Frage:
Mit Methoden habe ich noch nicht gearbeitet,
kannst du mir erklären wie ich sowas hinbekomme?
Eine Methode ist eine Procedure die zu einer Klasse gehört z.b. könntest du in TFrom1 im public Bereich:
procedure ReadDir; schreiben und dann weiter unten procedure TForm1.ReadDir; schreiben

Das ganze sieht dann so aus:

Code: Alles auswählen

procedure TForm1.ReadDir; 
begin
//... Code um ein Verzeichnis einzulesen
end;
Schau dich mal hier um:http://www.dsdt.info/ da findest du sehr viele Infos, zwar für Delphi, aber ein Groß Teil gilt auch für Lazrus/FPC
2. Frage:
Ich habe einen Ordner mit allen Bildern,
wie bekomme ich die alle in eine Liste?
Das einfachste wäre es, du bindest die Unit FileUtil ein und schaust dir mal die Funktion FindAllFiles an.
3. Frage: (hat nicht ganz was mit der anderen Frage zu tun)
Kann man Objekte in der Form ausblenden, also beim Erstellen.
Weil ich hab da schon viele Objekte und das wir bei mir alles ein wenig unübersichtlich
Die meisten Visuellen Komponenten haben die Eigenschaft Visible wenn du die auf False stellst, siehst du sie nicht mehr. Das gilt jedoch nur wenn du das Programm startest.
Zu Desiner Zeit müsstest du andere Komponenten verwenden, um eine bessere Übersicht zu bekommen z.b. TNoteBookt oder TPageControl

Hinweis: Das was du als Objekte bezeichnest sind im allgemeinen "KOMPONENTEN". Objekte sind eigentlich was anders... habe gerade kein Beispiel zur Hand.

Hinweis2: Es gibt eine FileListBox die zeigt dir den Inhalt eines angebenden Verzeichnisses an. Dann hättest du schon mal zugriff auf die Dateien.
MFG
Michael Springwald

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

pluto hat geschrieben:

Code: Alles auswählen

procedure TForm1.ReadDir; 
begin
//... Code um ein Verzeichnis einzulesen
end;
Was bedeutet das "ReadDir" ?

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

Re: Bilderliste - Lazarus

Beitrag von pluto »

ReadDir ist der Name der Methode. In diesen Fall ohne Parameter. Eine Methode ist eine Procedure oder Funktion die zu einer Klasse gehört.
Aber das war nur ein Beispiel.

Ein Vorschlag:
1. Fange ein komplett neues Projekt an.
2. Speichere das Projekt unter MyBilderListe ab, am besten in einem eigenen Ordner mit Passenden Namen
3. Wähle in der Komponenten liste zwei Komponenten aus: TFileListBox und TScrollBox
Klicke nun die TFileListBox mit der Linken Maustaste an und im OI(In der Regel auf der Rechten Seite) befinden sich die Eigenschaften, die diese "Komponente" hat.
Schau dir mal die Eigenschaften aus, da müsste eine dabei sein, wo du dein Verzeichnis angeben kannst.
Schon sollte in der TFileListBox, der Inhalt von deinem Verzeichnis zu finden sein.

Mehr machen wir erst mal nicht. Fortsetzung Folgt.
MFG
Michael Springwald

Have a nice Day
Beiträge: 59
Registriert: Fr 2. Nov 2012, 19:44

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

Du machst dir richtig Mühe mit mir :)
Ich habe leider keinen der mir das erklären kann.

Das was du erläutert hast habe ich nun hinbekommen.
Was nun mein Problem ist:
Wie bekomme ich es hin das er diese Inhalte als Bild in meine ScrollBox kopiert und anzeigt.

Hoffe nun auf Lesson 2 im Kurs von Herrn pluto :D

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

Re: Bilderliste - Lazarus

Beitrag von pluto »

Kein Thema. Ich erstelle gerade eine Beispiel Anwendung, ist glaube ich einfacher, ich denke, ich werde "bald" Fertig sein.
MFG
Michael Springwald

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

Re: Bilderliste - Lazarus

Beitrag von pluto »

Wie versprochen, hier ein sehr kleines Beispiel Projekt.

Ich hoffe du kannst damit etwas anfangen.
Dateianhänge
bilderliste.zip
(281.21 KiB) 112-mal heruntergeladen
MFG
Michael Springwald

Antworten