Ich zeichne meine Grafik direkt auf Canvas des Formulars. Dabei kann es vorkommen, daß das Bild größer ist als das Formular. In diesem Fall soll es möglich sein mit Bildlaufleisten zu scrollen. Es ist also nichts besonderes um was es hier geht. Es geht um Bildlaufleisten.
Da ich aber keine Komponenten benutze, sonder direkt auf dem Formular zeichne, kommen kleine Probleme auf micht zu:
1.) zuerst dachte ich, daß man die Bildlaufleisten des Formulars nutzen kann. Geht nicht. Die gehen automatisch an wenn ein Objekt auf dem Formularbereich verschwindet. Ein Einschalten für den eigenen Gebrauch geht nicht.
2.) also selbst Bildlaufleisten auf dem Formular plaziert (unten und rechts) und in FormResize die nötige Berechnung durchgeführt, die dafür sorgen, daß die Bildlaufleisten immen unten und rechts bleiben. Soweit klappt alles.
Das Problem habe ich wenn ich das Formular am oberen oder linken Rand packe und schnell hin und her verschiebe (d.h. schnell vergrößere und verkleinere). In diesem Fall haben die Bildlaufleisen eine gewisse Verzögerung. Packe ich das Formular am linken Rand und scheben den Rand schnell nach rechts, dann verschwindet sogar gelegentlich die rechte Bildlaufleiste aus den Formularbild. Scheibe ich den Rand wieder schnell nach links, dann bleibt die Bildlaufleise für kurzen Augenblick wie kleben, bis es sich wieder am Rand anpast.
Das Ganze ist ein hässlicher Effekt. Kennt einer eine bessere Berechnung (eventuell direkt API), die eine schnellere Anpassung vornimmt?
Hier die Berechnung die ich benutze:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.FormResize(Sender: TObject); begin with HScrollBar do begin Top := Self.ClientHeight - Height; Width := Self.ClientWidth - VScrollBar.Width; end;
with VScrollBar do begin Left := Self.ClientWidth - Width; Height := Self.ClientHeight - HScrollBar.Height; end; end; |
Hier das Beispiel als Projekt. Erspart die Tipparbeit: