Na dann viel Spaß, wenn dein Programm mal größer wird.400kmh hat geschrieben: Ich schreibe grundsätzlich alles in eine Datei, damit ich mich nicht verzettel. Hatte damit nie ein Problem.
Wie komme ich an Dateiinhalte heran?
Re: Wie komme ich an Dateiinhalte heran?
Re: Wie komme ich an Dateiinhalte heran?
Ich weiss, wollte 400kmh nur nicht sofort überfordern. Allerdings ist die Aussage natürlich richtig und wichtig.theo hat geschrieben:@michl: Auf einen flüchtigen Canvas sollte man nur in OnPaint zeichnen, nicht in OnClick. Auf Mac funktioniert das gar nicht afaik.
Besser wäre es z.B. in der Art:
Code: Alles auswählen
TForm1 = class(TForm)
...
private
FPict: TPicture;
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
FPict.LoadFromFile('test.jpg');
Repaint;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FPict := TPicture.Create;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(FPict);
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
if Assigned(FPict) then
Canvas.Draw(0, 0, FPict.Bitmap);
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- 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?
Bitte nicht alles in eine Datei schreiben, das ist Grauenhafter Programmierstil. Außerdem sind GUI Anwendungen Event Basiert, was bedeutet dass man nur bei Message Events von Komponenten Code ausführen sollte. Die LCL kümmert sich dabei um den Idle Loop, also kurz gesagt, Finger weg von der LPR Datei, das widerspricht der kompletten Natur der LCL. Und ich kann dir versprechen, dass du damit nicht weit kommen wirst. Vielleicht hattest du noch nie ein Problem damit, aber zum einen ist das Ganze Eventbasiert anzugehen einfacher, Übersichtlicher, besser Wartbar, besser erweiterbar, und viel weniger Fehleranfällig. Es geht natürlich auch komplett imperativ alles über die LPR zu machen, aber das ist als etwa genauso sinnreich wie mit den Händen einen Nagel in die Wand zu schlagen, obwohl man einen Hammer hat.400kmh hat geschrieben: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 !!!
Um mit Lazarus auf die Pixel von Bildern zuzugreifen verwende die Klasse TBtimap oder TLazIntfImage. TBitmap kannst du z.B. über Canvas oder ScanLine bearbeiten, TLazIntfImage via GetDataLineStart.
Re: Wie komme ich an Dateiinhalte heran?
Klingt sinnvoller. Hab das mal so geändert. Aber zu welchen Zeitpunkten wird denn das OnPaint-Ereignis automatisch ausgelöst? Anscheinend zumindest einmal am Anfang.theo hat geschrieben:Das "OnPaint" Ereignis des Formulars wäre dafür geeignet und nicht ein Timer.
Mein längstes Programm ist 3674 Zeilen lang. Und ich kann davon ein Backup einfach in einer Textdatei speichern.wp_xyz hat geschrieben:Na dann viel Spaß, wenn dein Programm mal größer wird.
-
- 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?
Mehr Dateien = Übersichtlicher, und um die Backups kümmert sich Lazarus von selbst. Das wird dir jeder Programmierer mit ausreichend Erfahrung bestätigen. Das ist auch ein System welches sich so etabliert hat, in nahezu jeder Programmiersprache, denn es ist schlicht weg besser. Sieh dir mal Dijkstras Werke zum Strukturierten Programmieren an, es hat schon einen Grund warum das als Standard zum Sauberen Programmieren gilt. Selbst wenn du keine Probleme mit deinem Stil hast hast, es geht besser.400kmh hat geschrieben:Klingt sinnvoller. Hab das mal so geändert. Aber zu welchen Zeitpunkten wird denn das OnPaint-Ereignis automatisch ausgelöst? Anscheinend zumindest einmal am Anfang.theo hat geschrieben:Das "OnPaint" Ereignis des Formulars wäre dafür geeignet und nicht ein Timer.
Mein längstes Programm ist 3674 Zeilen lang. Und ich kann davon ein Backup einfach in einer Textdatei speichern.wp_xyz hat geschrieben:Na dann viel Spaß, wenn dein Programm mal größer wird.
Außerdem erhöt sich mit mehr Dateien die Reuse-Value deines Codes drastisch. es gibt eigentlich keinen Grund nicht mehrere Dateien zu verwenden, grade weil IDE's nahezu alle Nachteile mehrerer Dateien ausgemerzt haben (Das Dateimanagement, Backups, selbst Git oder SVN management machen moderne IDE's ohne dass du dich damit befassen musst)
Re: Wie komme ich an Dateiinhalte heran?
Hi,
Besser wäre für kleine Programme den DesignTime-RAD-Modus von Lazarus zu nutzen und themenspezifisch deinen QuellCode in eigene Units auszulagern, die du dann in allen Programmen sehr leicht wiederverwenden kannst. Das ist dann auch sehr sehr sehr viel übersichtlicher und wird immer übersichtlicher je größer das Programm wird.
Du kannst ja gerne Umwege gehen, aber besser wäre es natürlich den direkten Weg sofort zu benutzen...
Wenn du nur die DPR bzw. LPR benutzen möchtest, dann kannst du ja auch alle anderen RAD Eigenschaften über Bord werfen und direkt die zugrundeliegende API ansprechen. Dann erhälst du winzige Programme, aber ab ca. 2 bis 3.000 Zeilen wird das dann echt unübersichtlich und du kannst nichts davon auf einfache Art in einem anderen Programm nutzen.Ich schreibe grundsätzlich alles in eine Datei, damit ich mich nicht verzettel. Hatte damit nie ein Problem.
Besser wäre für kleine Programme den DesignTime-RAD-Modus von Lazarus zu nutzen und themenspezifisch deinen QuellCode in eigene Units auszulagern, die du dann in allen Programmen sehr leicht wiederverwenden kannst. Das ist dann auch sehr sehr sehr viel übersichtlicher und wird immer übersichtlicher je größer das Programm wird.
Sicher kann man so etwas Einfaches mit Lazarus machen, ich dachte du brauchst vielleicht semitransparente Pixel und alles was man in dem Zusammenhang noch so gebrauchen könnte... dafür sind die LIB's ja da...Das heißt ich kann mit Standard-Lazarus nicht abfragen welche Farbe irgendein Pixel in einer Bilddatei hat? Das wäre schlecht.
Genau, TImage ist RAD pur: Einfach ein Bild laden und sich dann um nichts mehr kümmern zu müssen... inklusive aller Events, die man gleich mitbekommt...Wie auch immer, dann ist es aber eigentlich besser gleich ein TImage zu nehmen, was genau für die Anzeige eines TPictures gemacht wurde.
Du kannst ja gerne Umwege gehen, aber besser wäre es natürlich den direkten Weg sofort zu benutzen...
Re: Wie komme ich an Dateiinhalte heran?
Programmstart: OnCreate, OnShow, OnPaint, OnActivate, OnPaint, OnResize (optional).... So war das glaube ich ...Klingt sinnvoller. Hab das mal so geändert. Aber zu welchen Zeitpunkten wird denn das OnPaint-Ereignis automatisch ausgelöst? Anscheinend zumindest einmal am Anfang.
EDIT: Ich sitze hier gerade vor Delphi 7 und da bekomme ich immer zweimal OnPaint beim Start...
Bei Lazarus gibt es scheinbar nur einmal OnPaint:
Also OnCreate, OnShow, OnActivate, OnPaint und optional OnResize...
+ jedesmal wenn du selbst per QuellCode ein Repaint einleitest
+ immer wenn das Fenster minimiert war und wieder angezeigt wird