Resize - TImage mit Bitmap



  • Hi,

    ich habe ein Projekt mit einem MDI-Form als Hauptformular.

    In diesem Hauptformular will ich als Hintergrund ein Bild, welches als Bitmap-Datei vorliegt. Das Bild soll immer den gesamten Hintergrund des Formulars ausfüllen.

    Meine Idee war, das Bild in einer TImage-Komponente anzuzeigen. Diese Komponente hab ich in der Eigenschaft Align auf alClient gesetzt. In der Entwicklungsumgebung funktioniert nun folgendes: Wenn ich das Formular in der Größe ändere, wird das Bild angepaßt. Während der Laufzeit funktioniert das allerdings nicht. Die Größe der TImage-Komponente wird zwar an die Größe des Formulars angepaßt, allerdings wird das Bild nicht angepaßt.

    Ich habe zwar eine Beiträge im Forum gefunden. Allerdings kam ich mit den Lösungen dort nicht ganz zurecht. Wäre nett, wenn mir das Problem jemand erklären könnte.

    Vielleicht hat auch jemand einen ganz anderen Vorschlag, wie ich die Idee mit dem Hintergrundbild realisieren könnten.

    Danke schon mal.



  • Hallo,

    Hast du die Eigenschaft Stretch des Image auf true ?



  • Ja, Stretch habe ich auf true gesetzt. Erst danach hat es in der Entwicklungsumgebung funktioniert, aber eben nicht während der Laufzeit.



  • Hi,
    versuche es mal mit einem leeren Projekt, ob der Fehler auch auftritt! Bei mit funktioniert es gut!

    MFG

    Alexander Sulfrian



  • Jetzt muß ich wirklich bloß noch genau das machen, was Du machst.

    Ich habe allerdings ein leeres Projekt und es klappt leider nicht.

    Folgendes habe ich gemacht:
    Ich lege eine neue Anwendung an.
    Ändere den FormStyle zu MDI-Form.
    Füge eine TImage-Komponente hinzu.
    Bei dieser verändere ich nur folgende Eigenschaften:
    Align = alClient
    Picture = das anzuzeigende Bild auswählen
    Stretch = true
    Dann kompilieren und ausführen.

    Ich kann das Formular in der Größe verändern und die TImage-Komponente paßt sich an. Das Bild wird allerdings "überzeichnet".
    Wenn ich z.B. mein Formular auf Vollbild setze (Runtime). Dann sehe ich das Bild in der Anfangsgröße und auf dem erweiterten Platz (durch die Vergrößerung) den gestretchten Teil des Bildes. Es ist also als würde das Bild vergrößert werden, allerdings noch einmal in der Ursprungsgröße in die linke, obere Ecke gezeichnet werden.

    Was hast Du anders gemacht???



  • Hallo,

    die Form muß neu gezeichnet werden!

    wenn du dein Test maximiert hast und dieser Effeckt erscheint,
    das kleine Bild auf dem Großen, und klickst auf minimieren und
    danach auf die Taskleiste um es wieder aufzubauen ist der Effeckt
    weg, daher muß die Form neu gezeichnet werden wenn ein Resize aus
    gelöst wurde.

    gruß promicha



  • Ich habe folgendes versucht im OnResize-Event der Form:
    Form->Repaint();
    Image->Repaint();

    Beides funktioniert nicht. Tut mir leid, wenn ich jetzt irgendetwas offensichtliches übersehe, aber ich weiß wirklich nicht, was ich machen soll.



  • hast recht funktioniert nicht, habs gerade probiert.
    Ich habe jetzt alle einfachen sachen mal probiert von
    Refresh bis Update aber nichts hilft. Ich probiere mal
    ob der Effeckt bleibt wenn man beim onResize das Bild
    erneut einladet, wenn nicht dann giebts da auch noch
    Möglichkeiten.



  • Bild neu einladen bringt nichts.
    Also eins ist sicher, es liegt an MDI, denn normal gehts ja.
    Mich interessiert das jetzt auch, aber ich gehe erst mit dem
    Hund und dann lese,suche,FAQe mich mal durch ob ich was finde
    womit ich der Sache auf dem Grund komme, ist bestimmt Simpel.



  • Super, ich danke Dir schon mal jetzt für Deine bisherigen Mühen.
    Ich muß jetzt noch ein bißchen an meinen Datenbank-projekten weiterarbeiten. Dann gehts es mal ins Bett. 5:30 Uhr ist Aufstehen angesagt... 😃 👍



  • So also, ähh ja erst mal gute::nacht

    ich habe auf die schnelle nichts gefunden, leider mußte ich auch
    geschlagende fast 2 Stunden Telefonieren.
    Nun gut man kann es kompliziert machen und die Messages abfangen und
    Auswerten da onResize ja bereits beim Start ausgefürt wird, und dann
    entsprechend reagieren und das MDI Aufbauen klappt auch ist
    aber nicht eine einfache Lösung.
    Die einfache Lösung ist man benutzt etwas was nichts direct damit zu tun
    hat, also man nehme ein TPanel ebenfalls mit Align->AllClient und BevelInner,
    BevelOuter auf "bvNone" setzen und daruf das TImage platzieren mit den
    bekannten Einstellungen, das funktioniert.

    Ist sicherlich nicht die perfekte Lösung aber es geht, nach meiner
    Suche mußte ich Feststellen das im Aufbau von MDI immer Probleme
    giebt, guck mal in der suche mit MDI, oft in Verbindung mit VC++

    gruß und nacht Michael



  • Fantastisch, genau so hat es funktioniert. Ich danke Dir.



  • tja, aber irgenwie funktioniert es denn doch nicht so, wie gewünscht.

    versuch 1:ich erstelle ein MDI-Dokument, setze ein TImage rein, vergebe diesem ein bildchen. starte, und nichts ist zu sehen.

    versuch 2:ich erstelle ein MDI-Dokument, setze ein TPanel und darin ein TImage rein, vergebe diesem ein bildchen. starte, man sieht es, allerdings überdeckt er jetzt die child fenster.

    was soll ich da tun, damit ich nur im hintergrund ein bild sehen kann, ohne dass dieses die child fenster überdeckt?

    gruß gerd



  • Speicher das Bild doch in einem TBitmap.
    In OnPaint der Form machste StretchDraw in Canvas der Form!



  • ich find das so scheisse
    laut der Dokumentation müsste das automatisch beim Anpassen der Width/Height Eigenschaften funktionieren... bei mir klappt das nicht mal in normalen Forms, aber ich hab grad n Workaround hinbekommen:

    delete(Image);
    Image = new(TImage)(Form1);
    Image->Parent=Form1;
    Image->Top=8;
    Image->Left=8;
    Image->Width=size+2;
    Image->Height=size+2;

    funktioniert 🙂
    CU

    AlgoMan


Anmelden zum Antworten