AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rechteck verschieben

Ein Thema von delphicoder123 · begonnen am 15. Jun 2019 · letzter Beitrag vom 17. Jun 2019
 
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
713 Beiträge
 
Delphi 12 Athens
 
#7

AW: Rechteck verschieben

  Alt 15. Jun 2019, 10:42
Oh Mann, wo soll man da anfangen

Beginnen wir mal mit Koordinaten. Mouse.Cursorpos liefert die Position der Maus auf dem Bildschirm, d. h. (0,0) ist die linke obere Ecke des Bildschirms (bzw. des Desktops, wenn der sich über mehrere Bildschirme erstreckt). Im Windows-Standardkoordinatensystem geht die positive Y-Achse nach unten. Die Koordinaten deines Rechtecks sind aber relativ zu der Zeichenfläche (Canvas), auf der sich das Rechteck zeichnen soll, d.h. in deinem Kode ist (0,0) die linke oberer Ecke der Clientarea des Forms, da Du ja den Canvas des Forms verwendests. Du mußt also nach Bedarf umrechnen, und dafür hat jedes Control (und auch TForm) die Methoden ClientToScreen und ScreenToClient.

Dann gibt es da noch einen Punkt zu beachten. Ein TCanvas für ein Fenster/Control hat keinen persistenten Speicher (anders als der Canvas einer TBitmap). Was Du darauf zeichnest wird zu einen nur angezeigt, wenn das zugehörige Fenster sichtbar ist (was im OnCreate-Event des Forms nicht der Fall ist), und zum anderen wird es gnadenlos überschrieben, wenn das Fenster sich aus irgend einem Grund neu zeichnen muss (z. B. weil ein darüberliegendes Fenster bewegt oder geschlossen wird). Windows ist so designed, dass sich jedes Fenster und jedes Control darin quasi auf Zuruf neu zeichnen muss. Für ein Form löst ein solcher "Zuruf" den OnPaint-Event aus, den mußt Du also bearbeiten, um dein(e) Rechteck(e) neu zeichnen zu können, wenn das notwendig wird. Wenn Du eine TPaintbox als Zeichenfläche verwendest musst Du entsprechend ihren OnPaint-Event verarbeiten. Nur wenn Du ein TImage als Zeichenfläche verwendest hast Du einen Canvas der sich selbst neu zeichnen kann, da er auf einer Bitmap basiert, die das TImage-Control automatisch erzeugt, wenn dein Kode zum ersten Mal auf den Image.Canvas zugreift. Die Bitmap hat die Größe der Client area des TImage wenn sie erzeugt wird, aber die Größe wird nicht automatisch angepasst, wenn sich die Größe des TImage danach ändern sollte. Man muss dann image.picture.bitmap.width und .height im Code anpassen.
Peter Below
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz