Wie komme ich an Dateiinhalte heran?
Wie komme ich an Dateiinhalte heran?
Hallo, ich würde gerne in einem Lazarus-Programm mit Daten, die in Dateien gespeichert sind, rechnen.
Aber wie bekomme ich Daten aus einer Datei?
Nehmen wir als Beispiel eine Datei mit folgendem Pfad, Namen und Typ: "C:\test.bmp"
Was muss ich nun in ein Programm schreiben um da dran zu kommen?
Was muss ich unter "uses" hinschreiben?
Welche Variablen brauche ich?
Was muss ich ins Hauptprogramm schreiben?
Aber wie bekomme ich Daten aus einer Datei?
Nehmen wir als Beispiel eine Datei mit folgendem Pfad, Namen und Typ: "C:\test.bmp"
Was muss ich nun in ein Programm schreiben um da dran zu kommen?
Was muss ich unter "uses" hinschreiben?
Welche Variablen brauche ich?
Was muss ich ins Hauptprogramm schreiben?
-
- Beiträge: 6919
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Wie komme ich an Dateiinhalte heran?
Willst du ein Bild berechnen.Nehmen wir als Beispiel eine Datei mit folgendem Pfad, Namen und Typ: "C:\test.bmp"
Man müsste genauer wissen, um welche Dateien es sich handelt.Hallo, ich würde gerne in einem Lazarus-Programm mit Daten, die in Dateien gespeichert sind, rechnen.
Ist es eine Text-Datei, dann ist es einfach, eine StingList erzeugen und mit LoadFromFile laden.
Ist es eine Binär-Datei, dann wird es schwieriger, man muss die Datenstruktur kennen.
Und somit wird dann am besten mit FileStreams gearbeitet.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
Re: Wie komme ich an Dateiinhalte heran?
Ich will zunächst Bilder verändern/vereinfachen und dann noch mehr damit machen. Grob gesagt.Mathias hat geschrieben:Willst du ein Bild berechnen.Nehmen wir als Beispiel eine Datei mit folgendem Pfad, Namen und Typ: "C:\test.bmp"
Es handelt sich vor allem um bmp-Dateien aber auch um jpg- und png-Dateien.Mathias hat geschrieben:Man müsste genauer wissen, um welche Dateien es sich handelt.Hallo, ich würde gerne in einem Lazarus-Programm mit Daten, die in Dateien gespeichert sind, rechnen.
-
- Beiträge: 2122
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Wie komme ich an Dateiinhalte heran?
Für Bilder kannst du die Graphics Unit aus der LCL verwenden, die kümmert sich auch um das Lesen und Schreiben der Dateien
Re: Wie komme ich an Dateiinhalte heran?
Aha, ich habs mal mit folgendem Code probiert:Warf hat geschrieben:Für Bilder kannst du die Graphics Unit aus der LCL verwenden, die kümmert sich auch um das Lesen und Schreiben der Dateien
Code: Alles auswählen
Program Bildprogramm; {$mode objfpc} {$H+}
{$apptype gui}
uses
Interfaces, Forms, Graphics, ExtCtrls;
Var
Form1: TForm;
Image1: TImage;
begin
Application.Initialize;
Application.CreateForm(TForm, Form1);
Image1.Picture.LoadFromFile('C:\test.bmp');
Application.Run;
end.
Re: Wie komme ich an Dateiinhalte heran?
Willst du uns veralbern?
Du bist seit sechs Jahren im Forum angemeldet und hast 0,0 Ahnung von gar nichts?
Das kann nicht sein.

Du bist seit sechs Jahren im Forum angemeldet und hast 0,0 Ahnung von gar nichts?
Das kann nicht sein.

Re: Wie komme ich an Dateiinhalte heran?
Ich habe Pascal in der 10. Klasse gelernt, und dann eigenständig nadelstichartig bestimmte Dinge vertieft aber vieles links liegen gelassen was ich nicht gebraucht habe. Ich habe ein paar Programme mit über 1000 Zeilen geschrieben. In den letzten Jahren habe ich jedoch mehr mit Python programmiert. Für das, was ich jetzt vorhabe, halte ich Pascal jedoch für besser.theo hat geschrieben:Willst du uns veralbern?
Du bist seit sechs Jahren im Forum angemeldet und hast 0,0 Ahnung von gar nichts?
Das kann nicht sein.
Re: Wie komme ich an Dateiinhalte heran?
Vielleicht ein kleiner Vorschlag:
http://downloads.delphi-treff.de/DelphiStarter.pdf
Zisch dir doch mal dieses PDF... Ja ich weiß, dass ist eigentlich für "Embar-DELPHI-XE-irgendwas" geschrieben worden, aber alles was ich im Anfang davon gesehen habe kann man 1:1 auf Lazarus übertragen.
Darin kannst du ganz schnell die Basics finden und auch wo und wie du was machen kannst. Also auch was mache ich mit *.DPR (*.LPR), PAS, *.DFM (*.LFM) ... Dateien und wo kann ich was reinschreiben...
Den Anfang über die Installation läßt du einfach weg...
Das PDF ist sehr schön gemacht !!!
Sicher gibt es auch etwas vergleichbares direkt für Lazarus, aber nötig ist das eigentlich danach nicht mehr...
Starte doch einfach mal Lazarus und ziehe dir erstmal alles an Buttons und Knöpfen und was immer du brauchst auf das Formular (Form1) und dann schau dir die Events an, die du gebrauchen kannst und sage dem Programm was es machen soll.
Vielleicht noch eine Sache: Wenn du wirklich Bilddateien bearbeiten oder verändern möchtest, dann wirst du dir wohl auch noch ein Framework oder eine externe Library anschauen müssen, die kannst du dann DesignTime oder Runtime einbinden... oder beides... (Package usw.) (AggPas, GR32, VampyreImaging LIB usw....)
Viel Erfolg !!!
http://downloads.delphi-treff.de/DelphiStarter.pdf
Zisch dir doch mal dieses PDF... Ja ich weiß, dass ist eigentlich für "Embar-DELPHI-XE-irgendwas" geschrieben worden, aber alles was ich im Anfang davon gesehen habe kann man 1:1 auf Lazarus übertragen.
Darin kannst du ganz schnell die Basics finden und auch wo und wie du was machen kannst. Also auch was mache ich mit *.DPR (*.LPR), PAS, *.DFM (*.LFM) ... Dateien und wo kann ich was reinschreiben...
Den Anfang über die Installation läßt du einfach weg...
Das PDF ist sehr schön gemacht !!!
Sicher gibt es auch etwas vergleichbares direkt für Lazarus, aber nötig ist das eigentlich danach nicht mehr...
Das hier hat in der DPR bzw. LPR eigentlich nichts zu suchen...Image1.Picture.LoadFromFile('C:\test.bmp');
Starte doch einfach mal Lazarus und ziehe dir erstmal alles an Buttons und Knöpfen und was immer du brauchst auf das Formular (Form1) und dann schau dir die Events an, die du gebrauchen kannst und sage dem Programm was es machen soll.
Vielleicht noch eine Sache: Wenn du wirklich Bilddateien bearbeiten oder verändern möchtest, dann wirst du dir wohl auch noch ein Framework oder eine externe Library anschauen müssen, die kannst du dann DesignTime oder Runtime einbinden... oder beides... (Package usw.) (AggPas, GR32, VampyreImaging LIB usw....)
Viel Erfolg !!!
Re: Wie komme ich an Dateiinhalte heran?
Bis einschließlich Punkt 4.6 kann ich das alles. In Punkt 4.11 gehts um Dateien. Bilddateien werden da aber nicht behandelt.SoE hat geschrieben:Vielleicht ein kleiner Vorschlag:
http://downloads.delphi-treff.de/DelphiStarter.pdf
Ich schreibe grundsätzlich alles in eine Datei, damit ich mich nicht verzettel. Hatte damit nie ein Problem.SoE hat geschrieben:Das hier hat in der DPR bzw. LPR eigentlich nichts zu suchen...Image1.Picture.LoadFromFile('C:\test.bmp');
Ich mache das alles schriftlich, da habe ich alles in einer Textdatei und kann es jederzeit sofort rekonstruieren.SoE hat geschrieben: Starte doch einfach mal Lazarus und ziehe dir erstmal alles an Buttons und Knöpfen und was immer du brauchst auf das Formular (Form1) und dann schau dir die Events an, die du gebrauchen kannst und sage dem Programm was es machen soll.
Auf das Formular müssen nur ein oder zwei Bilder drauf und vielleicht noch eine Textausgabe. Das habe ich schon öfters gemacht und ist nicht schwer. Das Programm soll nur berechnen und ausgeben. Aber dazu müsste ich erstmal an Bilddateien rankommen.
Das heißt ich kann mit Standard-Lazarus nicht abfragen welche Farbe irgendein Pixel in einer Bilddatei hat? Das wäre schlecht.SoE hat geschrieben: Vielleicht noch eine Sache: Wenn du wirklich Bilddateien bearbeiten oder verändern möchtest, dann wirst du dir wohl auch noch ein Framework oder eine externe Library anschauen müssen, die kannst du dann DesignTime oder Runtime einbinden... oder beides... (Package usw.) (AggPas, GR32, VampyreImaging LIB usw....)
Danke.SoE hat geschrieben:Viel Erfolg !!!
Re: Wie komme ich an Dateiinhalte heran?
Neuer Versuch:
Eine Fehlermeldung gibts jetzt nicht mehr. Aber es wird kein Bild angezeigt. Auch wenn ich was anderes versuche mit Canvas zu zeichnen funktionierts nicht, obwohl das in einem älteren Programm von mir geklappt hat. Irgendetwas vergesse ich, was ich aber in meinem älteren Programm nicht wiederfinde.
Code: Alles auswählen
Program Bildprogramm; {$mode objfpc} {$H+}
{$apptype gui}
uses
Interfaces, Forms, Graphics, ExtCtrls, GraphType, IntfGraphics, LCLType, LCLProc, LCLIntf;
Var
Form1: TForm;
Bitmap1: TBitmap;
begin
Application.Initialize;
Application.CreateForm(TForm, Form1);
Bitmap1:=TBitmap.Create;
Bitmap1.LoadFromFile('c:\test.bmp');
Form1.Canvas.Draw(0,0,Bitmap1);
Application.Run; end.
Re: Wie komme ich an Dateiinhalte heran?
Schau Dir mal diese Kurse an: http://www.paukert.at/#delphi Ist für Einsteiger und Fortgeschrittene, u.a. auch Grafik (Bilder laden, Verarbeiten und Speichern). Ist zwar für Delphi7, kann aber problemlos mit Lazarus verwendet werden.
Re: Wie komme ich an Dateiinhalte heran?
Meine Empfehlung:
- zuerst: http://wiki.freepascal.org/Form_Tutorial/de
- dann zu dem: http://wiki.freepascal.org/TButton/de
- wenn du erfolgreich ein TButton auf dem Formular eingefügt hast, kannst du sowas in seinem OnClick-Eventhandler machen:
Als nächstes kannst du dich dem widmen, wie man Pixel in einem Bitmap ändert: http://wiki.freepascal.org/Developing_with_Graphics/de
- zuerst: http://wiki.freepascal.org/Form_Tutorial/de
- dann zu dem: http://wiki.freepascal.org/TButton/de
- wenn du erfolgreich ein TButton auf dem Formular eingefügt hast, kannst du sowas in seinem OnClick-Eventhandler machen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var
Pict: TPicture;
begin
Pict := TPicture.Create;
Pict.LoadFromFile('test.jpg');
Canvas.Draw(0, 0, Pict.Bitmap);
Pict.Free;
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
Re: Wie komme ich an Dateiinhalte heran?
Das ist eine ganz schlechte Idee, damit gibt du die meisten Vorteile von Lazarus auf.400kmh hat geschrieben:Ich schreibe grundsätzlich alles in eine Datei, damit ich mich nicht verzettel. Hatte damit nie ein Problem.SoE hat geschrieben: Das hier hat in der DPR bzw. LPR eigentlich nichts zu suchen...
Lass die *.lpr doch einfach in Ruhe und arbeite in Unit1, dann "verzettelst" du dich bestimmt nicht.
@michl: Auf einen flüchtigen Canvas sollte man nur in OnPaint zeichnen, nicht in OnClick. Auf Mac funktioniert das gar nicht afaik.
Re: Wie komme ich an Dateiinhalte heran?
So, ich habe jetzt eine pothässliche Lösung gefunden, die aber funktioniert:
Das Bild wird nun angezeigt. Canvas scheint erst zu funktionieren, wenn das Programm bereits läuft. Also habe ich das mit einem ansonsten total überflüssigen Timer gelöst. Das ist zwar pothässlich, aber im Moment ist mir alles recht, solange es funktioniert.
Code: Alles auswählen
Program Bildprogramm; {$mode objfpc} {$H+}
{$apptype gui}
uses
Interfaces, Forms, Graphics, ExtCtrls, GraphType, IntfGraphics, LCLType, LCLProc, LCLIntf;
Type
TForm1 = class(TForm)
Procedure Timer1Timer(Sender: TObject); end;
Var
Form1: TForm1;
Timer1: TTimer;
Bitmap1: TBitmap;
Procedure TForm1.Timer1Timer(Sender: TObject); begin
Form1.Canvas.Draw(0,0,Bitmap1);
Timer1.Enabled:=false; end;
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
with Form1 do begin
Left:=0;
Width:=round(Screen.WorkAreaWidth-8);
Top:=0;
Height:=round(Screen.WorkAreaHeight-27);
Show; end;
Timer1:=TTimer.Create(Form1);
with Timer1 do begin
OnTimer:=@Form1.Timer1Timer;
Interval:=1; end;
Bitmap1:=TBitmap.Create;
Bitmap1.LoadFromFile('c:\test.bmp');
Application.Run; end.
Re: Wie komme ich an Dateiinhalte heran?
Das "OnPaint" Ereignis des Formulars wäre dafür geeignet und nicht ein Timer.400kmh hat geschrieben: Das Bild wird nun angezeigt. Canvas scheint erst zu funktionieren, wenn das Programm bereits läuft. Also habe ich das mit einem ansonsten total überflüssigen Timer gelöst. Das ist zwar pothässlich, aber im Moment ist mir alles recht, solange es funktioniert.
Aber hör bitte mit dem *.lpr Quatsch auf, davon bekommt man ja Augenkrebs.
