Autor Beitrag
Tongamann
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 28.12.09 12:53 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Di 29.12.09 11:30 
user profile iconTongamann hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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.

user profile iconTongamann hat folgendes geschrieben Zum zitierten Posting springen:
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: