Grafik aus Datei laden

Forum für alles rund um die MSEide und MSEgui

Grafik aus Datei laden

Beitragvon fliegermichl » 15. Nov 2017, 09:54 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?
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon wp_xyz » 15. Nov 2017, 10:11 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:
Code: Alles auswählen
 img.Picture.LoadFromFile('pult.bmp');
wp_xyz
 
Beiträge: 2281
Registriert: 8. Apr 2011, 08:01

Beitragvon fliegermichl » 15. Nov 2017, 10:22 Re: Grafik aus Datei laden

Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon mse » 15. Nov 2017, 10:36 Re: Grafik aus Datei laden

fliegermichl hat geschrieben:Was mache ich da falsch?

Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden. Um png's zu lesen:
Code: Alles auswählen
 
uses
 mseformatpngread;
 

Die Formatunits sind in lib/common/image/. Für weitere Formate welche fpImage nicht kennt und bessere Performance gibt es auch ein Interface zu GraphicsMagick in lib/common/image/msemagickstream.pas.
Als "einfachste Sache" würde ich das Laden von Bildern nicht bezeichnen. ;-)
mse
 
Beiträge: 1713
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4.2,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon wp_xyz » 15. Nov 2017, 11:03 Re: Grafik aus Datei laden

fliegermichl hat geschrieben:Ja, mit Lazarus wird das genau so gemacht. in der msegui geht es so nicht

Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.
wp_xyz
 
Beiträge: 2281
Registriert: 8. Apr 2011, 08:01

Beitragvon mse » 15. Nov 2017, 11:06 Re: Grafik aus Datei laden

wp_xyz hat geschrieben:Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.

Siehe Screenshot.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
mse
 
Beiträge: 1713
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4.2,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon wp_xyz » 15. Nov 2017, 11:18 Re: Grafik aus Datei laden

mse hat geschrieben:
wp_xyz hat geschrieben:Dann wäre es gut gewesen, wenn man an deiner Frage irgendwie erkennen könnte, dass es um msegui geht.

Siehe Screenshot.

Ah, richtig. Das übersehe ich immer.
wp_xyz
 
Beiträge: 2281
Registriert: 8. Apr 2011, 08:01

Beitragvon fliegermichl » 15. Nov 2017, 11:48 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:
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;
 


Die Routine wird auch durchlaufen, nur erscheint keine Linie an der entsprechenden Stelle?
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon fliegermichl » 15. Nov 2017, 12:45 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.
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon mse » 15. Nov 2017, 13:25 Re: Grafik aus Datei laden

mse hat geschrieben:Die benötigten Grafikformat-units müssen in "uses" aufgenommen werden.

git master ba244f88bb6bab81b5910f84fab69b2a307c78ce zeigt den Fehler "Graphic format not supported." an wenn keine Formate registriert sind.
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.

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().

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();
 

nachdem alle Linien gezeichnet wurden.
Zuletzt geändert von mse am 15. Nov 2017, 13:59, insgesamt 1-mal geändert.
mse
 
Beiträge: 1713
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4.2,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon fliegermichl » 15. Nov 2017, 13:54 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.
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon mse » 15. Nov 2017, 14:05 Re: Grafik aus Datei laden

fliegermichl hat geschrieben:Hmm, wenn ich in die Bitmap zeichne, passiert gar nichts.

Siehe "Edit2:" oben.
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.

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'.
Hast du vielleicht einmal 'Project'-'Make 4' ausgeführt? Das kompiliert in den standard Projekttemplates ohne Debuginfos.
mse
 
Beiträge: 1713
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4.2,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon fliegermichl » 15. Nov 2017, 14:17 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.
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

Beitragvon mse » 15. Nov 2017, 14:33 Re: Grafik aus Datei laden

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.

Das kann man auch in 'Target'-'Breakpoints on' (Shortcut Ctrl+B) oder in den Debugger speed-buttons einstellen (der rote Punkt).
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.

In MSEide gibt es dazu die Hot-keys "Alt+V S" und "Alt+V W". Ob sich zusätzliche shortcuts lohnen?
Konsequenterweise müsste man dann alle Fenster mit shortcuts ausrüsten. Die Einstellung der MSEide Shortcuts geschieht übrigens in 'Settings'-'Configure MSEide'-'Shortcuts'.
mse
 
Beiträge: 1713
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.4.2,git master FPC 3.0,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon fliegermichl » 15. Nov 2017, 15:23 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.
fliegermichl
 
Beiträge: 145
Registriert: 9. Jun 2011, 08:42

• Themenende •

Zurück zu MSEide und MSEgui



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried