Autor Beitrag
MartinPb
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 04.04.05 22:45 
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:

ausblenden 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:
Einloggen, um Attachments anzusehen!
_________________
Gruß
Martin
uall@ogc
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1826
Erhaltene Danke: 11

Win 2000 & VMware
Delphi 3 Prof, Delphi 7 Prof
BeitragVerfasst: Mo 04.04.05 23:17 
hab das auch mal gemacht aber dann einfach auf nem image gezeichnet was ich dann halt an die größe angepasst habe (daurch kamen die scrolleisten von dem formular selber)

mein ich jedenfalls könnte nochmal nach dem source suchen

_________________
wer andern eine grube gräbt hat ein grubengrabgerät
- oder einfach zu viel zeit
Harry Hunt
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 50



BeitragVerfasst: Mo 04.04.05 23:23 
Du könntest die Bildlaufleisten auch einfach mit Align := alRight und Align := alBottom platzieren.
Es empfiehlt sich eine der beiden Bildlaufleisten in ein Panel zu packen und zwar so:

1) Panel erstellen
2) Align := alBottom
3) Ein Panel innerhalb dieses Panels erstellen
4) Zweites Panel auf Align := alRight setzen und die Breite auf 16 stellen
5) Die ScrollBar in das Panel platzieren und Align auf alClient setzen
6) Vertikale Scrollbar erstellen, Align := alRight

Dann hast du an der Stelle wo sich die zwei Bildlaufleisten treffen ein kleines Quadrat, wie das unter Windows so üblich ist (siehe rechte untere Ecke deines Browsers).
MartinPb Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 698



BeitragVerfasst: Mo 04.04.05 23:44 
@uall@ogc

Image ist keine Lösung, da Image die ganze Angelegenheit noch langsamer macht. Ich hab die Auswahl dann zwischen flackern der Image oder flackern der Bildlaufleisten.

@Harry Hunt

Bildlaufleisten haben kein Align, sonst würde ich ja keine Berechnung machen ...

Nein, halt. Alles zurück. Ich hab die Vorarbeiten mit Delphi 3 gemacht und der hat kein Align. Ich sehe aber gerade in Delphi 6, daß der sowas hat. Da ich das Programm später in Delph 6 weiter programmiere, hat sich das Problem zumindest in dem Bereich erledigt.

Allerdings sind die Align Bildlaufleisten auch nicht schneller :( Ok, kann man nichts machen. Danke euch beiden.

_________________
Gruß
Martin