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 »

Ich kann dir noch nicht ganz Folgen: Also, du hast ein Verzeichnis mit mehreren Text Dateien, die enthalten Pfade.

Im Moment passiert ja beim Klicken auf eine TImage Komponente, dass ein neues Fenster geöffnet wird.
Kannst du es noch etwas genauer beschreiben?
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 »

Also...
Ich habe einen Ordner in dem sind 106 txt-Datein.
Jede txt-Datei hat den Namen eines der 106 Bilder.
Wenn es ein Bild namens "Bild2" gibt dann gibt es dazu eine txt-Datei namens "Bild2.txt"
In jeder txt-Datei sind Pfade zu Bilder abgespeichert (z.B. C:\Eigene Bilder\Bild.txt)
Der Inhalt einer Datei sieht also so aus:
C:\Eigene Bilder\Bild.txt
C:\Eigene Bilder\Bild2.txt
C:\Eigene Bilder\Bild3.txt
C:\Eigene Bilder\Bild4.txt
Wenn man jetzt auf eins der 106 Bilder klickt soll sich kein neues Fenster öffnen, sondern es soll eine neue ScollBox eingeblendet werden.
Und die zu dem Bild gehörende txt-Datei auslesen und die Bilder die in der txt-Datei aufgelistet werden, and die neu eingeblendete ScrollBox anhängen.

Ich hoffe du hast jetzt verstanden was ich meine :]
Timo

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 verstehe zwar nicht, zu was das gut sein soll aber bitte... ich muss ja auch nicht alles verstehen *G*.

Statt dem Fenster, was sich öffnet, kannst du auch die Text Dateien öffnen.

Was meinst du mit Eingeblendet? Meinst du damit ein Fenster, wo die Bilder die in den Text Dateien drin sind angezeigt werden?

Am besten du versuchst es mal selbst, hier ein paar Stichpunkte:
1. TFrom, damit kannst du ein neues Fenster erstellen, mit Komponenten belegen und anzeigen lassen. Entweder Statisch oder Dynamisch.
2. TScrollBox, schau dir den Code mal an, den ich dir gegeben habe
3. TStringList, damit kannst du relativ leicht diese Text Dateien laden
4. ExtractFileName, um den reinen Namen vom angeklickten Bild zu bekommen, der Pfad und der Name steht im Hint vom Panel drin. Dann musst du nur noch die Erweiterung Erweiterung entfernen. Schau dir dazu mal copy und pos an
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 habe nun folgenden Code eingegeben:

Code: Alles auswählen

Suchtext :=  Suchen.Text;
  h := Scrollbox1.ComponentCount-1;
  for i := 0 to h do
    begin
     txt := (ScrollBox1.Components[i]);
     j := txt.hint;
aber er sagt das txt dann kein hint hat :[

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 »

Ja. Wie sehen deine Datentypen aus? Die du verwendest? Du musst (ScrollBox1.Components) "casten" zu einem TPanel:
(ScrollBox1.Components as TPanel) das wiederum hat ein Hint:

(ScrollBox1.Components as TPanel).hint
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 »

nun zeigt er mit folgenden Fehler an:
unit1.pas(106,13) Error: Incompatible types: got "TTranslateString" expected "TPanel"

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 »

unit1.pas(106,13) Error: Incompatible types: got "TTranslateString" expected "TPanel"
Ja, dann stimmt wohl was nicht mit dein Datentypen.
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 »

Wie hast du den Pfad und den Namen in den Hint geschrieben?
Ich habe folgenden Code geschrieben.
Als es nicht funktioniert hat habe ich einem Label nach j benannt (Label.caption := j)
Die Caption war dann nichts mehr. Das Label war nicht mehr zu sehen.
Wie bekomme ich den Hint richtig raus?

Code: Alles auswählen

procedure TForm1.Button3Click(Sender: TObject);
var
  i,h:integer;
  txt : TPanel;
  Suchtext,j : String;
begin
  Scrollbox3.free;
  Suchtext :=  Suchen.Text;
  h := Scrollbox1.ComponentCount-1;
  for i := 0 to h do
    begin
     txt := (ScrollBox1.Components[i]as TPanel);
     j := txt.hint;
     if pos(Suchtext,j) > 0 then
     begin
      txt := TPanel.Create(Scrollbox3);
      Scrollbox3.Visible := True;
     end;
    end;
end;

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 es mal so:

Code: Alles auswählen

procedure TForm1.Button3Click(Sender: TObject);
var
  i,h:integer;
  txt : TPanel;
  Suchtext,j : String;
begin
//  Scrollbox3.free; // Warum ScrollBox3 Freigeben? 
  Suchtext :=  Suchen.Text;
//  h := Scrollbox1.ComponentCount-1; Nicht Notwendig
  for i := 0 to Scrollbox1.ComponentCount-1 do
    begin
     txt := (ScrollBox1.Components[i] as TPanel).Hint; // Hint ist eine Eigenschaft von den meisten Sichtbaren Komponenten.
//     j := txt.hint; // Ist nicht notwendig
     if pos(Suchtext,txt) > 0 then
     begin
//      txt := TPanel.Create(Scrollbox3); // Das ist Fast richtig, aber schau dir die Datentypen noch mal an
//      Scrollbox3.Visible := True;
     end;
   end;
end;
Ganz wichtig sind die Datentypen. Darauf musst du achten. Die Einträge in ScrollBox1.Components sind alle von TComponent. Es können ja auch andere Komponenten hinzugefügt werden, nicht nur TPanel, sondern auch TEdit. TComponent ist nun der kleinste gemeinsammer nenner, eine sogeannte Bases bzw. Grundklasse.
Diese Grund Klasse verfügt über keinen Hint, die kommen später hinzu. Wann genau weiß ich nicht. Aber ein TPanel hat sie.
Also musst du diese Einträge Casten, da wir davon ausgehen können, dass die Einträge alle TPanel's sind, können wir es so machen, sonst würden wir eine Fehler Meldung bekommen, spätestens bei der Ausführung.

txt ist von Typ String, d.h. die kann mit den Datentyp TComponent bzw. TPanel nichts anfangen. Das wäre so, als ob du Birnen und Äpfel vergleichen würdest.
Die passen nicht zu einander. Die Datentypen sind wichtig. SEHR WICHTIG.

Mit den AS Operator können wir sicher casten(Umwandeln). D.h. Stimmen die Datentypen zur Laufzeit nicht, gibt es mit Sicherheit eine Fehlermeldung.
Denn unter Umständen steht ein Datentyp erst zur Laufzeit fest, wie in unseren Fall.

Warum gibst du ScrollBox3 frei, möchtest aber Komponenten einfügen. Ohne sie vorher zu installisieren.

Ich hoffe du verstehst mich hier nicht Falsch. Einfach ein Beispiel zu geben, wäre Langweilig und auch nicht Sinnvoll und auf Google verweisen kann ich schlecht...
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 »

Da ich jetzt schon müde bin werde ich mich morgen an deine Antwort setzten..
das ist mir jetzt ein bisschen zu viel...

aber ich wollte noch schnell eine Frage stellen...
Kann man Lazarus auch für iPhone/iPod Compilieren?
So das ich mir selber Apps programmieren könnte?

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 »

Theoretisch ja, aber bei den letzten beiden Lazarus-Forum-Treffen ging das nicht. Andere sagen wieder es geht. Aber einfach ist es jedenfalls nicht bzw. du muss Glück haben. Ob es geht oder nicht.
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 »

Und wie ist der Ansatz dabei?
Gibt es da ein Programm oder sowas das den Quellcode compiliert?

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 »

Mach dazu bitte ein neuen Thread auf. Ich kenne mich mit diesem Thema nicht so gut aus(Eigentlich gar nicht). Auch so, es geht um "iPhone/iPod "
Ob es dafür überhaupt eine Möglichkeit gibt, weiß ich nicht, ich habe jetzt Angenommen es geht um das "Google Linux"....
MFG
Michael Springwald

Antworten