Bilderliste - Lazarus
-
- 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
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?
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
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
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
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
-
- 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
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
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
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
Ich habe nun folgenden Code eingegeben:
aber er sagt das txt dann kein hint hat :[
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;
-
- 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
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
(ScrollBox1.Components as TPanel) das wiederum hat ein Hint:
(ScrollBox1.Components as TPanel).hint
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
nun zeigt er mit folgenden Fehler an:
unit1.pas(106,13) Error: Incompatible types: got "TTranslateString" expected "TPanel"
unit1.pas(106,13) Error: Incompatible types: got "TTranslateString" expected "TPanel"
-
- 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
Ja, dann stimmt wohl was nicht mit dein Datentypen.unit1.pas(106,13) Error: Incompatible types: got "TTranslateString" expected "TPanel"
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
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?
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;
-
- 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
Versuch es mal so:
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...
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;
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
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
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?
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?
-
- 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
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
Michael Springwald
-
- Beiträge: 59
- Registriert: Fr 2. Nov 2012, 19:44
Re: Bilderliste - Lazarus
Und wie ist der Ansatz dabei?
Gibt es da ein Programm oder sowas das den Quellcode compiliert?
Gibt es da ein Programm oder sowas das den Quellcode compiliert?
-
- 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
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"....
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
Michael Springwald