Bild auf anderem Formular anzeigen

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Aristophanes
Beiträge: 4
Registriert: Sa 23. Jul 2011, 21:35

Bild auf anderem Formular anzeigen

Beitrag von Aristophanes »

Ich bin dabei, ein Delphi-Grafikprogramm nach Lazarus zu portieren (Win 7) und bitte um Entschuldigung: Durch die Gewöhnung an Delphi stockt es immer wieder bei einfachsten Dingen.

Hier mein Problem: Auf form1 wird ein Bild geladen (unter Nutzung von TBGRABitmap) und soll auf die Canvas von form3 gezeichnet werden. Das Laden klappt, form3 wird angezeigt, das geladene Bild lässt sich auch speichern, flackert aber auf form3 nur kurz auf (nur sichtbar, wenn ich da auch noch Text ausgeben lasse) und verschwindet wieder.

Code: Alles auswählen

imageorg := loadimage(listbox1.items[0]);
with form3 do
begin
show;
imageorg.Draw(Canvas,0,0,True);
imageorg.savetofile('test.bmp');
end;
Was muss ich tun, damit es sichtbar bleibt?

Danke - Aristophanes
Zuletzt geändert von Lori am Mo 25. Jul 2011, 13:17, insgesamt 1-mal geändert.
Grund: Highlighter
Win7 64 Bit, Lazarus v0.9.30, TBGRABitmap, Portierung von Delphi 5 -> Lazarus

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Bild auf anderem Formular anzeigen

Beitrag von Heinrich Wolf »

Hallo,

ich komme auch von Delphi her und verwende jetzt auch Lazarus. Aber die Bezeichner, die Du verwendest, kenne ich nicht. Was ist ein TBGRABitmap? Was ist loadimage für eine Funktion? Liefert die ein TImage? Aber imageorg.Draw(Canvas,0,0,True) passt auch nicht zu einem TImage.

Alles, was Du auf ein TForm.Canvas zeichnest, ist nach dem nächsten Neuzeichnen weg. Das ist auch bei Delphi so. Du müsstest es in einem FormPaint Event immer wieder neu zeichnen. Aber leg doch einfach ein Image im Form Editor auf das Form. Lade das Image nur einmal zur Laufzeit und es wird automatisch immer wieder neu gezeichnet, wenn nötig.

Gruß
Heiner

MAC
Beiträge: 770
Registriert: Sa 21. Feb 2009, 13:46
OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
CPU-Target: 32Bit

Re: Bild auf anderem Formular anzeigen

Beitrag von MAC »

ganz der meinung von Heinrich Wolf:

Du hast es selbst gesagt, es wird gezeichnet und danach ist es weg. Weil sobald die Form neu gezeichnet wird dein Bild auch neu gezeichnet werden muss, oder es verschwindet halt...
Ich empfele dir übrigens ein ganz normales TImage ( unter Additional) zu verwenden, außer es gibt wichtige Gründe warum du dein TBGRABitmap verwendest...
Lege das TImage auf die 3te Form >> Rechtsklick Ankereditor anzeigen >>
dort kannst du einstellen, das das Image von dir automatisch so groß ist wie die Form...
und dann lädst du mit

Code: Alles auswählen

Form3.Image1.Picture.LoadfromFile('C:/test.png') //oder wie auch immer die Datei heißt...
Vorteil ist:
TImage kümmert sich um das zeichnen, das Format ist ziemlich egal da TImage mehrere unterstützt,...

Code: Alles auswählen

Signatur := nil;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Bild auf anderem Formular anzeigen

Beitrag von carli »

@MAC: du vergisst, dass es sich hier um ein Grafikprogramm handelt und dieses selbst kontrollieren will, was wo und wann gezeichnet wird.

Mach es am besten so, wie Heinrich Wolf es gesagt hat: Das onPaint-Ereignis belegen (und nach jeder Änderung am Bild repaint aufrufen)

Aristophanes
Beiträge: 4
Registriert: Sa 23. Jul 2011, 21:35

Re: Bild auf anderem Formular anzeigen

Beitrag von Aristophanes »

Vielen Dank für die Hilfe! OnPaint war die einfache Lösung. Das hatte ich bei meinem Delphi-Projekt nicht gebraucht.
Ich werde euch sicher noch öfter brauchen - es geht um einige tausend Zeilen. Das nächste Problem ist schon da :? Ich versuche mich erst einmal selber heranzutasten. Aber wenn ich nicht weiter komme und hier keine Starthilfe bekäme, müsste ich die Portierung abbrechen, auch wenn ich einige Zeit dafür eingeplant habe....

Bis später :wink: - Aristophanes
Win7 64 Bit, Lazarus v0.9.30, TBGRABitmap, Portierung von Delphi 5 -> Lazarus

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Bild auf anderem Formular anzeigen

Beitrag von creed steiger »

MAC hat geschrieben:, außer es gibt wichtige Gründe warum du dein TBGRABitmap verwendest...
bestimmt

http://wiki.freepascal.org/BGRABitmap" onclick="window.open(this.href);return false;
http://wiki.freepascal.org/BGRABitmap_tutorial" onclick="window.open(this.href);return false;

das schaut nicht schlecht aus

Antworten