Mausposition im gezoomten TImage
-
Mit den Mitteln der VCL (BCB3) scheint mein Problem nicht lösbar zu sein, ich versuch also hier mein Glück.
Hier mal die Methode, mit der ich zoome, ohne die reale Größe von Image->Picture->Graphic zu verändern:
Graphics::TBitmap *VergrPict = new Graphics::TBitmap(); VergrPict->Width = Image->Width; VergrPict->Width = Image->Width; VergrPict->Height = Image->Height; VergrPict->Assign(Image->Picture); Image->Width = Image->Width*1.2; Image->Height = Image->Height*1.2; Image->Canvas->StretchDraw(Image->Canvas->ClipRect,VergrPict); FormResize(Sender); // zentriert TImage im Fenster (in einer TScrollBox) // Diese Action ist unwirksam int x = (int)((float)Image->Canvas->PenPos.x * (float)1.2); int y = (int)((float)Image->Canvas->PenPos.y * (float)1.2); Image->Canvas->PenPos = Point(x,y); // hiermit hab ich auch keinen Erfolg Image->Canvas->PenPos.x = Image->Canvas->PenPos.x*1.2; Image->Canvas->PenPos.y = Image->Canvas->PenPos.y*1.2; // beide Actionen sind auch im OnMouseDown des TImage getestet
Die Situation: Angenommen, ich drücke die Maustaste an Point(10,20) des TImage. Die Zeichenoperation wird aber ab Point(20,30) ausgefürt. Die Werte sind jetzt mal fictiv und nur zur Veranschaulichung. Ich habe also eine Canvas->PenPos, die von der sichtbaren Mausposition deutlich abweicht. Je weiter ich von 100% wegzoome, desto stärker wird der Effekt.
Natürlich möchte ich die sichtbare Mausposition und die Canvas->PenPos miteinander synchronisieren. Entweder ist meine Zoomroutine falsch oder das WIN-API stellt Methoden bereit, das Problem zu lösen. Man sieht in jeder Mal- und Zeichenanwendung, daß es einwandfrei klappt. So soll es auch in meiner Anwendung sein.
Wer weiß Rat oder hat zumindest einen Tip? Ich wäre für Hilfe sehr dankbar, da dies für mich eine Schlüsselfrage über Sein oder Nichtsein darstellt. Die Anwendung wäre ohne die Korrektur völlig nutzlos.
-
Haaalt, wer wird denn gleich weglaufen? Bleib mal noch im Sichtbereich. Irgendjemand im weiten Land hat schon mal ein Maltool gebaut und weiß, was hier zu tun ist.
Es muß keine VCL-Syntax sein. API bleibt ohnehin API. Der ggf. weitere Code wird sich anpassen lassen. Wär stark, wenn sich jemand der Sache annehmen könnte. Oder soll der gute alte M$Paint wirklich die Nase vorn haben vor jedwedem Malprogramm, das irgendwann in einer IDE gebaut wurde?
Das wäre gar jämmerlich.
<edit>Aber Viren bauen und die Maschine irgendeines armen PC-Teufels zerstören, auf daß jener todunglücklich sei, macht ja wesentlich mehr Spaß, als eine Standardanwendung zusammenzupfriemeln. --- Ach, bin ich heut wieder gehässig.