Autor Beitrag
S-Man
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Do 22.09.05 17:12 
Ich versuche verzweifelt, die TImage-Height zur LAufzeit zu vergrößern. Prinzipiell macht das Programm folgendes: Es schreibt über Canvas.Textout Text auf das Image. Danach wird eine Zeilvariable erhöht, sodass der nächste Text quasi eine Zeile tiefer eingetragen wird. Nun kann es aber vorkommen, dass es zu viele Zeilen gibt, also die Zählvariable Positionen größer als die ImageHeight angibt. Ich versuche nun, das Image zu vergrößern und dann den TExt schreiben zu lassen. Die Height wird dann zwar vergrößert (Das Image reagiert sogar in an der betreffenden Stelle auf Mausklicks!), aber der sichtbare Bereich wird nicht angezeigt. Es ist also nach wie vor nur der Bereich sichtbar, der bei der ersten Zeileneintragung sichtbar war - der Rest ist unsichtbar.
Da ich nicht glaube, dass man mich jetzt verstanden hat (aufgrund meiner katastrophalen Erklärfähigkeiten), hier ein Beispiel:

Im Objektinspektor stelle ich für TImage einen Height-Wert von 12 ein.
Ich starte das Programm.
Ich tippe einen Text in ein EditFeld, welches die Schriftgröße 8 ausgibt.
Bei Drücken von vk_return im EditFeld (Ereignis OnKeyDown) soll überprüft werden, ob ImageHeight größer ist als Schriftgröße.
Die Zählvariable wird erhöht, damit beim nächsten mal, der Text in eine neue Zeile geschrieben wird.
Ausgabe ist OK, Image-Bereich wird sichtbar (Also auf dem Form wird ein weißes Rechteck mit ImageHeight/-Width sichtbar)
Da 12>8 ist alles OK, und der Text im EditFeld wird an Canvas.TextOut gegeben, wobei Canvas.Font.Size = Edit.Font.Size entspricht.
Text wird draufgeschrieben.
Beim nächsten Mal wird wieder abgefragt, ob eine zusätzliche Zeile ausgegeben werden kann (Zeilennummer*Schriftgröße)
Hier ist 12<16 (Height kleiner zwei Zeilen), also wird die Height auf 16 gesetzt.
Theoretisch kann nun der Text geschrieben werden.
Nun Problem: Die Height wird zwar geändert, doch der eigentlich sichtbare, weiße Bereich nicht. Dass die Height geändert wird, habe ich kontrolliert. Ich kann soger Linien über CAnvas.MoveTo/-LineTo zeichnen, wenn das MoveTo im weißen BEreich liegt und das LineTo über einen Mausklick im unsichtbaren BEreich ausgelöst wird. Nur, dass die Linien nur im sichtbaren BEreich angezeigt werden... Wie kann ich diesen Bereich zur Laufzeit vergrößern? Kann mir da jemand helfen?

So das war's auch "schon". ICh bedanke mich schon im Voraus für das Lesen, evtl. Problemlösungsansätzen und überhaupt für jegliche Idee, die kommen mag.

CU S-Man


Zuletzt bearbeitet von S-Man am Fr 23.09.05 11:42, insgesamt 1-mal bearbeitet
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 22.09.05 18:05 
Hallo,

erstmal :welcome: in der Entwickler-Ecke


Warum schreibst Du nicht direkt auf den Canvas der Form?
Ansonsten hilft Dir eventuell die Eigenschaft Stretch := True des TImage-Komponente weiter.

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )


Zuletzt bearbeitet von Lannes am Fr 23.09.05 12:09, insgesamt 1-mal bearbeitet
S-Man Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Fr 23.09.05 11:50 
ähm, das mit der Form hat Designtechnische Gründe. Ich brauche dieses Image definitiv!
Danke für die Anregung, mal schauen, ob es funktioniert.
S-Man Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: So 25.09.05 13:56 
Mit strech ändere ich bloß das Bild (in dem fall den text) und zerre es so, dass es in das image reingequetscht wird :-(

das gegenteil - autosize - also image passt sich bild an, funktioniert auch nicht!
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: So 25.09.05 19:28 
Hallo,

also neu Zeichnen nach der Image-Größenänderung.
Eventuell auch ein OffScreenBitmap dabei nutzen.
Sag mal was wird das eigentlich? > Text ausgeben? > kannst Du da nicht besser eine andere Komponente nutzen?

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
Astraios
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 25



BeitragVerfasst: Mo 26.09.05 08:56 
Hallo!

Ich hab das gleiche Problem und ich glaub, ich konnt es lösen:

Schreib nach der Größenänderung des TImage-Objekts noch folgendes:

ausblenden Delphi-Quelltext
1:
2:
Image.Picture.Bitmap.Width := Image.Width;
Image.Picture.Bitmap.Height := Image.Height;




Viele Grüße!
S-Man Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Di 27.09.05 11:34 
Danke schön! Du bist mein Held des Tages! Du hast mich gerettet *g*!