Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TUpdown ohne MouseWheel (https://www.delphipraxis.net/156089-tupdown-ohne-mousewheel.html)

Schwedenbitter 19. Nov 2010 12:10

TUpdown ohne MouseWheel
 
Hallo,

ich habe schon die Suchfunktion benutzt, aber nichts passendes finden können.

Auf meiner Form befindet sich eine TScrollBox. In dieser wiederum ein TImage. Mit dem Mausrad kann man nun den Zoom einstellen und das Bild größer oder kleiner anzeigen lassen. Das Bild selbst ist nur eine Vorschau.
Das Bild soll als jpeg komprimiert werden. Für TJPEGImage.CompressionQuality wollte ich ein TUpDown verwenden. Leider reagiert das auf das Scrollrad, so dass mein mühsam programmierter Zoom nicht mehr funktioniert.

Wie bringe ich TUpDown dazu, das Scrollrad zu ignorieren?

Ich habe dazu Code für (vermutlich) C gefunden. Es ist jedoch für mich zu kompliziert, dass nach Delphi umzusetzen. Dabei wird irgendwie die Komponente neu geschrieben, von TUpDown abgeleitet und WndProc so überschrieben, dass WM_MouseWheel an die übergeordnete Instanz weitergeleitet wird. Dadurch wird es dann im abgeleiteten TUpDown ignoriert - wenn ich das richtig verstehe. Sollte es keine einfachere Lösung geben, würde ich es mit 2 Buttons ('+' und '-') machen.

Gruß & Dank

rollstuhlfahrer 19. Nov 2010 13:06

AW: TUpdown ohne MouseWheel
 
Wie wäre es denn, wenn du der Öffentlichkeit mitteilst, was dein C-Code denn ist, damit sich vielleicht ein anderer dran machen kann, den nach Delphi-Pascal zu portieren?

Bernhard

PS: Hat TUpDown ein Event ähnlich OnMouseWheel?

Schwedenbitter 19. Nov 2010 20:48

AW: TUpdown ohne MouseWheel
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1062574)
Wie wäre es denn, wenn du der Öffentlichkeit mitteilst, was dein C-Code denn ist, damit sich vielleicht ein anderer dran machen kann, den nach Delphi-Pascal zu portieren?

Entschuldigung. Wird nicht wieder vorkommen. Ich habe hier etwas gefunden. Mehr scheint es dazu nicht zu geben. Auch das hat nichts weiter gebracht.

[VERGESSEN]
Das Ableiten ist nicht das Problem. Ich habe aber wenig Lust, eine neue Komponente zu schreiben. Es kommt hinzu, dass ich TurboDelphi und damit das leidige Problem mit den Fremkomponenten habe. Da müsste ich dann wieder etwas zur Laufzeit erstellen.
[/VERGESSEN]

Zitat:

Zitat von rollstuhlfahrer (Beitrag 1062574)
Hat TUpDown ein Event ähnlich OnMouseWheel?

Leider nicht. Das wäre dann auch zu einfach gewesen: Über Handled das Event abwürgen und/oder ggf. als Message an die Scrollbox weiterleiten.
Gibt es aber leider nicht.

himitsu 19. Nov 2010 21:17

AW: TUpdown ohne MouseWheel
 
TUpDown sollte nur auf das Scrollen reagieren, wenn es den Eingabefokus besitzt.

Ergo: Nimm dem TUpDown den Eingabefokus und schon reagiert es nicht mehr.

PS: In OnMouseLeave könntest du z.B. den Fokus woanders hinlegen.
Delphi-Quellcode:
{irgendein anderes sichtbares Control}.SetFocus;
oder
Delphi-Quellcode:
ActiveControl := nil;
Wenn man per Tastatur das UpDown betreten hat, dann muß man da erstmal Manuell wieder da raus (oder man geht mal kurz mit der Maus drüber)

Schwedenbitter 19. Nov 2010 21:59

AW: TUpdown ohne MouseWheel
 
Zitat:

Zitat von himitsu (Beitrag 1062658)
TUpDown sollte nur auf das Scrollen reagieren, wenn es den Eingabefokus besitzt.

Es reagiert auf das Scrollrad, wenn das associated control den Focus hat. Das ist richtig.
Das Problem bei mir ist aber, dass es nur eine TScrollBox, ein TImage, ein TEdit und TUpDown gibt. Es gibt also niemandem, dem ich den Focus geben könnte.

Delphi-Quellcode:
ActiveControl := nil;
Funktioniert insoweit gut. Danke für den Tipp. Es klappt nur beim anzeigen des Fensters nicht sofort. Ich habe es bei TEdit.OnChange und bei TSubForm.OnShow eingefügt. Ich gehe davon aus, dass es bei OnShow ausgeführt wird. Allerdings wird die erste Bewegung des Scrollrades immer noch von TUpDown wahrgenommen.
Aber damit kann ich schon einmal leben!

Gruß

himitsu 19. Nov 2010 22:49

AW: TUpdown ohne MouseWheel
 
http://www.delphipraxis.net/156104-i...ml#post1062675


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz