Announcement

Collapse
No announcement yet.

Imagegröße zur Laufzeit anpassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Imagegröße zur Laufzeit anpassen

    Hallo,

    Ich male auf dem Canvas einer Image-Komponente die Daten einer Rechnung
    (Adresse, Datum, Rechnungsdaten) mit Textout,Lineto etc.<br>
    Das funktioniert auch gut. Für die Übersicht will ich die Größe der Ansicht variieren. Dazu habe ich in eine Scrollbox ein Panel gelegt, auf das Panel die Imagekomponente als alclient.<br>
    Über Trackbar frage ich Integerwerte zwischen 400 und 1000 ab und setze das Panel auf die entsprechnde Breite, berechne eine passende Fontgröße und zeichne die Rechnung neu. Soweit klappt alles, aber:<br>
    beim Verkleinern funktioniert alles gut, beim Vergrößern passt sich das Image nicht an das vergrößerte Panel an, sondern nur immer maximal so breit, wie es bei der Entwicklung erstellt war. <br>
    Geht das überhaupt mit TImage ? Ich brauche nur einen veränderbaren Canvas,
    den ich als Client an das Panel anpassen kann.<br>

    Viele Grüße, Günter

  • #2
    hi Günther

    Image1.Width := panel1.Width => vergrößert das Image

    oder noch tiefer

    Image1.Picture.Bitmap.Width := panel1.Width; => paßt dann den Canvas an

    Gruß
    Bernhar

    Comment


    • #3
      HAllo Bernhard,

      genau das geschieht nicht. Das Image wird nicht größer als zur Designzeit, nur kleiner.

      Ich habe jetzt den Weg genommen, in einer Scrollbox ein Riesenimage zu erzeugen (2000 * 3000, falls es solche Monitore gibt)), auf dem ich dann meine Rechung mit Umrechnugsfaktoren male. Funktioniert auch, war nur etwas mehr programmieraufwand.

      Danke für deine Antwort

      Gruß Günte

      Comment


      • #4
        Hallo an alle,<br>
        leider habe ich dasselbe Problem unter Delphi 5 Standard (Windows XP). Wenn ich versuche, ein TImage in Laufzeit größer zu machen, als in der Entwicklung, und (!) in dem größeren Bereich auch noch malen will, so ist eben dieser "neue" Bereich immer grau, sprich das Gemalte wird dort nicht angezeigt.<br>

        Bitte kann mir vielleicht jemand bei diesem Problem helfen?<br>

        Super herzlichen Dank!<p>
        Zuletzt editiert von Gast_1; 31.03.2010, 13:04. Reason: Realname entfernt

        Comment


        • #5
          Hallo,<br>habe eben in D5 probiert den Effekt nachzuvollziehen, ohne Erfolg. Hast Du mal ein repaint oder refresh auf das Image versucht?<br>Michae

          Comment


          • #6
            Hallo Michael,<br>
            danke für deine Antwort. Mein Image liegt auf einem Panel, so daß ich jetzt unter Panel.Resize sowohl das Image "refreshen" als auch "repainten" lasse. Doch leider existiert das Problem immer noch.<br>
            Irgendwo im Netz habe ich gelesen, daß das Problem auch erst ab Windows 2000 auftreten soll. Benutzt Du vielleicht irgendetwas abwärts (so daß das Problem bei dir nicht in Erscheinung treten kann)?<br>
            Super danke für deine/eure Hilfe!<br>
            Zuletzt editiert von Gast_1; 31.03.2010, 13:05. Reason: Realname entfernt

            Comment


            • #7
              Hi,<br>ich benutze XP/Prof, wie gesagt kann ich dein Problem leider nicht nachvollziehen :-(<br>Michae

              Comment


              • #8
                Hallo Michael,<br><br>
                herzlichen Dank nochmal für deine Antwort. Mittlerweile habe ich das Problem einmal unter Windows 98 SE geprüft und herausgefunden: Auf meinem Rechner zumindest tritt dort dasselbe Problem auf - es hängt also nicht vom OS ab. Unter <a href="http://roemmler.com/extern/ImageTest.zip">diesem Link</a> findest Du ein Beispielprojekt, das ich programmiert habe, um das Problem anschaulich darzustellen. Wird das Programm gestartet, so kann das Rechteck auf dem Image noch korrekt gezeichnet werden (0,0,200,200). Sobald man in Laufzeit das Image in der Breite bsw. vergrößert, so wird die danach gezeichnete Ellipse in dem neuen Teil nicht mehr angezeigt. Bei mir erhalte ich also nur eine halbe Ellipse, nämlich nur den linken Teil.<br><br>
                Herzlichen Dank für weitere Hilfe!<br><br>
                Zuletzt editiert von Gast_1; 31.03.2010, 13:05. Reason: Realname entfernt

                Comment


                • #9
                  Hi,<br>probiere mal folgendes, um nicht nur das sichtbare Imageobject sondern auch die Bitmap.canvas anzupassen ;-) <PRE>
                  //Trackbar.min:=10;
                  //Trackbar.max:=400;
                  //Trackbar.position:=200;

                  procedure TfrmHaupt.TrackBar1Change(Sender: TObject);
                  begin
                  Image.Width := trackbar1.position;
                  Image.picture.bitmap.width := trackbar1.position;
                  Image.picture.bitmap.Canvas.brush.Color := clwhite;
                  Image.picture.bitmap.Canvas.Rectangle(0,0,Image.Wi dth,Image.Height);
                  Image.picture.bitmap.Canvas.Ellipse(50,20,350,180) ;
                  end;
                  </PRE><br>Michae

                  Comment


                  • #10
                    Hi Michael,<br><br>
                    wow, genial! Super herzlichen Dank, so funktioniert alles einwandfrei. Ich dachte, sobald man das Image-Objekt in seiner Größe veränderte, daß sich die "Malflächen"-Maße auch automatisch mitverändern... Man braucht nur den "Umweg" über "Picture.Bitmap" zu gehen und alles funktioniert, wie man es braucht. :-)<br><br>
                    Also nochmal ein dickes Dankeschön für deine Bemühungen und deine Hilfe!<br><br>
                    Alles Gute,<br>
                    Zuletzt editiert von Gast_1; 31.03.2010, 13:05. Reason: Realname entfernt

                    Comment

                    Working...
                    X