Grafik aus Datei laden
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Grafik aus Datei laden
Manchmal scheitere ich an den einfachsten Sachen. Ich habe eine timage Komponente in meinem Formular und möchte in dieses eine Grafik aus dem Dateisystem laden.
Klappt einfach nicht.
img.bitmap.loadfromfile('pult.bmp') liefert mir nur eine Exception "Graphic format error".
Was mache ich da falsch?
Klappt einfach nicht.
img.bitmap.loadfromfile('pult.bmp') liefert mir nur eine Exception "Graphic format error".
Was mache ich da falsch?
Re: Grafik aus Datei laden
Kann das sein? TImage hat doch gar kein Bitmap. TImage ist nur die sichtbare Hülle, die eigentliche Graphik-Arbeit wird von dessen Picture verrichtet.
So sollte es funktionieren:
So sollte es funktionieren:
Code: Alles auswählen
img.Picture.LoadFromFile('pult.bmp');
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Grafik aus Datei laden
Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden. Um png's zu lesen:fliegermichl hat geschrieben: Was mache ich da falsch?
Code: Alles auswählen
uses
mseformatpngread;
Als "einfachste Sache" würde ich das Laden von Bildern nicht bezeichnen.

Re: Grafik aus Datei laden
Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.fliegermichl hat geschrieben:Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Grafik aus Datei laden
Siehe Screenshot.wp_xyz hat geschrieben: Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.
Re: Grafik aus Datei laden
Ah, richtig. Das übersehe ich immer.mse hat geschrieben:Siehe Screenshot.wp_xyz hat geschrieben: Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Aja, mal wieder etwas, was man erst mal wissen muss. Das laden der Grafik geht jetzt.
Und schwupp stolpere ich über den nächsten Punkt.
Diese Grafiken sind kleine Vorschaugrafiken von den verschiedenen Dachtypen.
Wenn der Anwender ein Eingabefeld betritt, so soll er als Eingabehilfe kleine Linien sehen, welche ihm anzeigen, welches Mass in dem jeweiligen Eingabefeld vom Programm erwartet wird.
Zu dem Zweck gibt es einen Event editEnter in dem die Prozedur MarkLine mit entsprechenden Parametern aufgerufen wird.
Markline ist so definiert:
Die Routine wird auch durchlaufen, nur erscheint keine Linie an der entsprechenden Stelle?
Und schwupp stolpere ich über den nächsten Punkt.
Diese Grafiken sind kleine Vorschaugrafiken von den verschiedenen Dachtypen.
Wenn der Anwender ein Eingabefeld betritt, so soll er als Eingabehilfe kleine Linien sehen, welche ihm anzeigen, welches Mass in dem jeweiligen Eingabefeld vom Programm erwartet wird.
Zu dem Zweck gibt es einen Event editEnter in dem die Prozedur MarkLine mit entsprechenden Parametern aufgerufen wird.
Markline ist so definiert:
Code: Alles auswählen
procedure tdachtypeingabefo.MarkLine(fromPoint: Pointty; ToPoint: Pointty;
aColor: Colorty; aWidth: Integer);
begin
if not Assigned(img.Bitmap) then exit;
with img.Bitmap.Canvas do
begin
LineWidth := aWidth;
Color := aColor;
DrawLine(FromPoint, ToPoint, cl_Blue);
end;
end;
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Sorry, das Thema hatten wir ja schon einige Threads vorher. Ich kann in dem image.OnPaint Event in den übergebenen aCanvas Parameter zeichnen.
msegui ist halt vollkommen anders aufgebaut als ich das von Delphi oder Lazarus kenne.
msegui ist halt vollkommen anders aufgebaut als ich das von Delphi oder Lazarus kenne.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Grafik aus Datei laden
git master ba244f88bb6bab81b5910f84fab69b2a307c78ce zeigt den Fehler "Graphic format not supported." an wenn keine Formate registriert sind.mse hat geschrieben: Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden.
AFAIK wird zeichnen ausserhalb von "OnPaint" auch für Lazarus nicht empfohlen, auf Mac funktioniert es AFAIK gar nicht. Wenn du in MSEgui einen canvas ausserhalb "OnPaint" benötigst benutze bitte twidget.getcanvas().fliegermichl hat geschrieben: Sorry, das Thema hatten wir ja schon einige Threads vorher. Ich kann in dem image.OnPaint Event in den übergebenen aCanvas Parameter zeichnen.
Edit1:
Ich sehe du zeichnest in die Bitmap. Dein Code sollte so funktionieren, der Test auf nil von img.Bitmap ist nicht notwendig, das setzen von "Color" ebenfalls nicht.
Edit2:
Was fehlt ist
Code: Alles auswählen
img.bitmap.change();
oder
img.invalidate();
Zuletzt geändert von mse am Mi 15. Nov 2017, 13:59, insgesamt 1-mal geändert.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Hmm, wenn ich in die Bitmap zeichne, passiert gar nichts. Wenn ich im onPaint Event der Image Komponente in den übergebenen aCanvas zeichne, dann geht es.
Jetzt habe ich aber grad mal ein ganz anderes Problem. In meinem Projekt funktionieren plötzlich keine Breakpoints mehr?!?
Wenn ich ein neues Dummyprojekt erzeuge, dann funktionieren sie. Ich habe die Kommandozeilen des Compileraufrufes verglichen und die sind von den Dateinamen abgesehen identisch.
Jetzt habe ich aber grad mal ein ganz anderes Problem. In meinem Projekt funktionieren plötzlich keine Breakpoints mehr?!?
Wenn ich ein neues Dummyprojekt erzeuge, dann funktionieren sie. Ich habe die Kommandozeilen des Compileraufrufes verglichen und die sind von den Dateinamen abgesehen identisch.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Grafik aus Datei laden
Siehe "Edit2:" oben.fliegermichl hat geschrieben:Hmm, wenn ich in die Bitmap zeichne, passiert gar nichts.
Dazu fällt mir nichts gescheites ein. Vielleicht mit 'Project'-'Build' kompilieren, damit alle units neu gemacht werden, vielleicht zuerst auch alle Breakpoints löschen mit 'View'-'Breakpoints'-RightClick-'Delete all'.Jetzt habe ich aber grad mal ein ganz anderes Problem. In meinem Projekt funktionieren plötzlich keine Breakpoints mehr?!?
Wenn ich ein neues Dummyprojekt erzeuge, dann funktionieren sie. Ich habe die Kommandozeilen des Compileraufrufes verglichen und die sind von den Dateinamen abgesehen identisch.
Hast du vielleicht einmal 'Project'-'Make 4' ausgeführt? Das kompiliert in den standard Projekttemplates ohne Debuginfos.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Ha,
ich wollte deinem Rat gerade folgen und siehe da. View -> Breakpoints -> "Breakpoints on" war aus. Häkchen gesetzt und schon funktionieren sie wieder. Ist schon merkwürdig. In diesem Fenster war ich noch nie drin.
andere Frage. Wäre es ein großer Aufwand, die Menüpunkte aus dem View Menü in die Shortcut Liste zu packen? In Lazarus mach ich Ctrl+Alt+S und sehe den Stack oder Ctrl+Alt+W und schon ist das watchfenster da.
ich wollte deinem Rat gerade folgen und siehe da. View -> Breakpoints -> "Breakpoints on" war aus. Häkchen gesetzt und schon funktionieren sie wieder. Ist schon merkwürdig. In diesem Fenster war ich noch nie drin.
andere Frage. Wäre es ein großer Aufwand, die Menüpunkte aus dem View Menü in die Shortcut Liste zu packen? In Lazarus mach ich Ctrl+Alt+S und sehe den Stack oder Ctrl+Alt+W und schon ist das watchfenster da.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: Grafik aus Datei laden
Das kann man auch in 'Target'-'Breakpoints on' (Shortcut Ctrl+B) oder in den Debugger speed-buttons einstellen (der rote Punkt).fliegermichl hat geschrieben:Ha,
ich wollte deinem Rat gerade folgen und siehe da. View -> Breakpoints -> "Breakpoints on" war aus. Häkchen gesetzt und schon funktionieren sie wieder. Ist schon merkwürdig. In diesem Fenster war ich noch nie drin.
In MSEide gibt es dazu die Hot-keys "Alt+V S" und "Alt+V W". Ob sich zusätzliche shortcuts lohnen?andere Frage. Wäre es ein großer Aufwand, die Menüpunkte aus dem View Menü in die Shortcut Liste zu packen? In Lazarus mach ich Ctrl+Alt+S und sehe den Stack oder Ctrl+Alt+W und schon ist das watchfenster da.
Konsequenterweise müsste man dann alle Fenster mit shortcuts ausrüsten. Die Einstellung der MSEide Shortcuts geschieht übrigens in 'Settings'-'Configure MSEide'-'Shortcuts'.
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1639
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Grafik aus Datei laden
Dann habe ich vermutlich versehentlich Ctrl B erwischt.
Nein Alt-V S und Alt-V W reicht auch. Da gewöhnt man sich schon dran.
Nein Alt-V S und Alt-V W reicht auch. Da gewöhnt man sich schon dran.