Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - TImage in TScrollBox
Tongamann - Mo 28.12.09 12:53
Titel: TImage in TScrollBox
Ich habe ein TImage, in dem bei Mausclick kleine Dreiecke gezeichnet werden. Ich hätte gerne die Möglichkeit, auch ausserhalb des sichtbaren Bereiches weiterzeichnen zu können, indem Scroll-Balken erscheinen und ich dann eine größere Fläche für das Zeichnen von weiteren Dreiecken habe.
Habe gelesen, dass ich hierfür das TImage in eine TScrollBox einbetten muss, die mir dann jegliches Scrollen ermöglicht. Gesagt, getan - nur macht er das noch nicht entsprechend...
Wo bzw. wie kann ich ihm sagen, welchen Bereich er darstellen soll und er ggf selber entscheidet, ob er ScrollBalken einfügt oder nicht?
Als Eigenschaften im Object Inspector habe ich bei der ScrollBox folgende:
HorzScrollBar : Visible : True
VertScrollBar : Visible : True
AutoScroll : True
AutoSize : False
Hoffe, mein Anliegen ist einigermassen klar geworden...
iKilledKenny - Mo 28.12.09 13:01
Du musst das Image in die ScrollBox legen (Image.Left = 0 und Image.Top = 0) und dann einfach die Größe des Images (Image.Width und Image.Height) ändern, das Scrollen wird dann automatisch von der ScrollBox übernommen.
Tongamann - Di 29.12.09 08:13
Aha, da kommen wir der Sache schon eine ganze Ecke näher.
Ich habe aber noch ein Problem, dass die Mausposition nun nicht mehr korrekt zum Zeichnen funktioniert, wenn das Bild ein wenig zur Seite gescrollt ist. Gibt es da eine Möglichkeit die Position der Scrollbalken zu der Mausposition hinzuzurechnen, so dass das Zeichnen dann auch wirklich an der Stelle erfolgt, auf die gerade geklickt wird? Zur Zeit nutze ich "ScreenToClient(Mouse.CursorPos)"...
Gibt es auch die Möglichkeit, die Image.Width "on the fly zu erweitern"? Beim Prorammstart male ich auf der gesamten sichtbaren Fläche ohne Scrollbalken. Wenn nun ein Dreieck an den Rand gemalt wird, soll die Zeichenfläche automatisch erweitert werden. Wenn ich hier ein image.width einfüge, erstellt er mir einen entsprechenden Scrollbalken und ich kann diesen auch benutzen, nur schiebt er das Image aber aus dem Bild raus, - die Grösse des Images bleibt aber unverändert. Oder muss ich jedesmal bei einer neuen Zuweisung von image.width das gesamte Bild neu zeichnen lassen?
iKilledKenny - Di 29.12.09 11:30
Tongamann hat folgendes geschrieben : |
Gibt es da eine Möglichkeit die Position der Scrollbalken zu der Mausposition hinzuzurechnen, so dass das Zeichnen dann auch wirklich an der Stelle erfolgt, auf die gerade geklickt wird? Zur Zeit nutze ich "ScreenToClient(Mouse.CursorPos)"... |
Die Position der ScrollBar läßt sich auch ermitteln:
Delphi-Quelltext
1: 2:
| ScrollBox.VertScrollBar.Position ScrollBox.HorzScrollBar.Position |
Die musst du in der Berechnung deiner Position auf dem Image natürlich berücksichtigen.
Tongamann hat folgendes geschrieben : |
Gibt es auch die Möglichkeit, die Image.Width "on the fly zu erweitern"? |
Ja, gibt es. Einfach mal probieren, die Properties im Code zu setzen.
Beim Rest verstehe ich nicht wirklich, was du meinst. Vielleicht nochmal genauer erklären. :nixweiss:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!