Bilderliste - Lazarus

Für Fragen von Einsteigern und Programmieranfängern...
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 »

Code: Alles auswählen

procedure TFrom1.VisibleFalse(sender:TObject);
begin
  ScrollBox1.Visible := False;
  ScrollBox2.Visible := False;
  Map3v3.Visible := False;
end;
Hat die Funktion Paramenter? ist es deine eigene Methode?

Ach ja, du musst TFrom1.VisibleFalse noch Oben im Klassenheader hinzufügen: procedure VisibleFalse(sender:TObject) einfach unter public oder so
Dort stehen verschiedene Sichtbarkeit Bereiche, Public, Private unter anderem.

Ein Aufruf geht jetzt so:

Code: Alles auswählen

VisibleFalse(self);
Wenn du es außerhalb der eigenen Klasse nutzen möchtest geht es noch anders.
Problem ist self. Wie schon gesagt. Mach es erst mal so:

Code: Alles auswählen

VisibleFalse(Form1);
Das sollte immer gehen.
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 »

Hat die Funktion Paramenter? ist es deine eigene Methode?
Nee.. die Funktion/Methode habe ich nur geschrieben, da ich immer mehr Sachen dazubekommen werde, die ich ausblenden lassen will.
Und dann brauche ich nicht immer alles wieder erneut ausschreiben.

In deinem Programm:
Die Bilder in der Scrollbox sind ja in einer Tabelle.
Kann man das Gitternetz ausblenden?

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 »

Kann man das Gitternetz ausblenden?
Ja das geht. Schau dir mal von einem Panel die ersten Eigenschaften an. Da müssten dir zwei Eigenschaften auffallen.
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 TFrom1.VisibleFalse(sender:TObject);
begin
  ScrollBox1.Visible := False;
  ScrollBox2.Visible := False;
  Map3v3.Visible := False;
end;
Hat die Funktion Paramenter? ist es deine eigene Methode?

Ach ja, du musst TFrom1.VisibleFalse noch Oben im Klassenheader hinzufügen: procedure VisibleFalse(sender:TObject) einfach unter public oder so
Dort stehen verschiedene Sichtbarkeit Bereiche, Public, Private unter anderem.

Ein Aufruf geht jetzt so:

Code: Alles auswählen

VisibleFalse(self);
Wenn du es außerhalb der eigenen Klasse nutzen möchtest geht es noch anders.
Problem ist self. Wie schon gesagt. Mach es erst mal so:

Code: Alles auswählen

VisibleFalse(Form1);
Das sollte immer gehen.
Nun zeigt er mir verschiedene Fehler an:
unit1.pas(130,18) Error: Identifier not found "TFrom1" - Warum kann er denn die TForm1 nicht finden
unit1.pas(130,30) Error: class identifier expected - kann ich mir leider nichts drunter vorstellen :'(
unit1.pas(132,13) Error: Identifier not found "ScrollBox1" - die gibt es eigentlich schon aber er findet sie nicht :(
unit1.pas(133,13) Error: Identifier not found "ScrollBox2" - hier das gleiche wie bei der anderen
unit1.pas(134,9) Error: Identifier not found "Map3v3" - hier das gleiche wie bei den scrollboxen
unit1.pas(145) Fatal: There were 5 errors compiling module, stopping

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

Re: Bilderliste - Lazarus

Beitrag von theo »

Nun zeigt er mir verschiedene Fehler an:
unit1.pas(130,18) Error: Identifier not found "TFrom1" - Warum kann er denn die TForm1 nicht finden
:roll:

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: Bilderliste - Lazarus

Beitrag von Komoluna »

Hallo

da ich so etwas ähnliches vorhabe wollte ich kein neues Thema aufmachen...

Ich habe folgendes Problem:

Wenn ich diesen Code in ein Programm einfüge, dann wird keine Fehlermeldung erzeugt aber es passiert auch nichts...
als wäre der folgende Code nicht vorhanden...

Code: Alles auswählen

 
Images: array [0..3] of TImage;
 
  for i:=0 to 3 do
  Begin
  Images[i]:=TImage.Create(Form1);
  Images[i].Left:=11*i;
  Images[i].Top:=11*i;
  Images[i].Width:=10;
  Images[i].Height:=10;
  Images[i].Visible:=true;
  Images[i].Picture.PNG.LoadFromFile(extractfilepath(paramstr(0))+'pictures\pic'+inttostr(i)+'.png');
  end;
 
und die dateien(pic0.png;pic1.png;pic2.png;pic3.png) exestieren alle...

Vielen Dank schonmal im Vorraus

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

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

Re: Bilderliste - Lazarus

Beitrag von theo »

Immer den Parent setzen. Gilt für alle Controls.

http://lazarus-ccr.sourceforge.net/docs ... arent.html

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

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

theo hat geschrieben:Nun zeigt er mir verschiedene Fehler an:
unit1.pas(130,18) Error: Identifier not found "TFrom1" - Warum kann er denn die TForm1 nicht finden
:roll:
ohh... was ein doofer Fehler... :/
und ich hab eigentlich nochmal alles genau durchgelesen...
aber hab gelesen was ich lesen wollte

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

Re: Bilderliste - Lazarus

Beitrag von Have a nice Day »

Nun versuche ich die eine Suchoption in meine Bilderliste einzubauen.
Dazu will ich die Titel aller Bilder durchgehen.

Dazu haben ich 2 Fragen.
1. Frage
Mit welchem Befehl bekomme ich raus, wie groß der Inhalt meiner Scrollbox ist (also wieviele Panels ich da drin habe)

2. Frage
Wie kann ich einstellen das ich mit meiner Sucheingabe (z.B. "aff") nicht nur Erfolg habe wenn ich das ganze Wort eingebe (also "Affe" oder "Bergaffe")?
Ich habe dunkel in Erinnerung das das sowas war mit einem %-Zeichen.

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 »

Ich gebe mal ein paar Stichpunkte, vielleicht helfen die weiter:
1. jeder Container Komponente wie z.b. die ScrollBox oder auch das From oder auch das Panel haben Eigenschaften wie ComponentCount und Component.
Bin mir gerade nicht sicher, ob ich diese beiden Eigenschaften richtig geschrieben habe.
Ich gehe davon aus, du hast ein Edit Feld, wo du den Suchbegriff eingeben kannst.
Da neben könnte ein Button sein, wo der User im einfachsten Fall drauf klicken kann. In diesen Button, könnte ein For schleife Starten.
Schau dir mal den Code an, wie die Liste erstellt wird. Ich meine, im Hint habe ich den Datei Namen sowie das Verzeichnis eingetragen.

Beim Suchen, könnte eine neue Liste erstellt werden, z.b. in einem neuen Dialog. Mit einer einfache ListBox, oder mit einer Ähnlichen ScrollBox. Es gibt viele Möglichkeiten.

2. Du meinst, du möchtest nach Teil Wörter suchen? Das geht relativ einfach mit Pos. Du muss jeden Eintrag in der ScrollBox prüfen, ob im Hint etwas passt, z.b. könntest du einen CheckButton nutzen, worüber der User entscheiden kann, ob Wortweise oder nur Teilwortweise. oder so.
Das geht dann so, in etwa: if pos(Suchtext,Panel.hint) > 0 then // Gefunden

Solltest du es gar nicht hinbekommen erweitere ich das Beispiel. Dann wird es eine Vierte Version geben.
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 »

Ich werde das mal ausprobieren.

Und ich habe noch eine Frage.
Ich will mithilfe des Programms eine Textdatei erstellen.
Ich habe im Internet gesucht aber irgendwie hat das bei mir immer nicht funktioniert.
Bist jetzt habe ich das:

Code: Alles auswählen

assignfile('','Pfad' + (ChangeFileExt(FileListBox1.Items[i],'')));
[Soll eine Datei mit dem Namen des Items aus der FileListBox erstellenm die leer ist]
Zum auslesen

Code: Alles auswählen

Variable.LoadFromFile('Pfad+Dateinamen')
und zum Speichern dann

Code: Alles auswählen

Variable.SaveToFile('Pfad+Dateinamen')

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 »

Versuch mal die TStringList zu verwenden. Das ist deutlich einfacher, als deine Idee. ListBox1.Items.LoadFromFile oder ListBox1.Items.SaveToFile
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 »

Ich meine, im Hint habe ich den Datei Namen sowie das Verzeichnis eingetragen.
Wie bekomme ich denn Hint denn raus?

Mein Ansatz

Code: Alles auswählen

txt := ScrollBox1.Component[i].Hint

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 »

Das wird nicht ganz gehen. Du musst die Komponenten Casten: txt := (ScrollBox1.Component as TPanel).Hint
Ich müsste aber um sicher zu gehen, noch mal in den Code Schauen, aber versuch mal.
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 »

Kannst du mir eventuell den Quellcode geben für ein Teil des Programms der folgendes macht:
Also es geht darum das wenn man auf die Bilder klickt was bestimmtes passiert.

Wenn ich auf ein Bild drauf klicke soll er im Pfad: .\resources\bin
eine txt-Datei mit dem Namen des Bildes (auf das draufgeklickt wurde) [Bildname.txt] suchen.
Diese soll er dann auslesen.
In der Textdatei sind Pfade drin, die auf Bilder verweisen (z.B. .\resources\items\Dolch.png)
Nun soll er alle diese Pfade auslesen und diese Bilder in eine schon existierende Scollbox hinzufügen.

Das mit der ScollBox soll so werden wie bei der anderen.
Das könnte ich dann auch selber machen, aber dafür brauche ich den Anfang.

Würde mich riesig freuen wenn du das machen könntest.
MFG Timo

Antworten