Hi Leute,
ich glaub ich bin am Ende meines Lateins. Folgende Aufgabenstellung:
Ich erstelle in einer Anwendung in einer Scrollbox ein Schema mittels eigener Komponenten (Nachfahren von TCustomControl) zur Laufzeit. In einer Scrollbox natürlich deshalb, weil das Schema größer werden kann als der Bildschirmbereich. Jetzt kann man zwar alles super platzieren, weil es durch die Scrollbox keine festen Begrenzungen gibt, aber die Sache wird bei großen Schematas natürlich etwas unübersichtlich. Praktisch ist dann ja eine Zoomfunktion. Immer wohl gemerkt, dass es nicht um ein Image oder Zeichnen auf den Canvas, sondern um Komponenten auf einer Scrollbox geht.
Nun dachte ich, dass kann man mit SetViewportExtEx lösen. Da tut sich aber gar nichts. Hier mal mein Code:
Delphi-Quellcode:
procedure TSeysolMain_Form.ToolButton4Click(Sender: TObject);
var OSize : TSize;
ActiveSB : TRTGroupScrollBox;
Res : Boolean;
SBDC : HDC;
begin
OSize.cx := 0;
OSize.cy := 0;
ActiveSB := GetScrollBox(self, PageControl1.ActivePage); // meine aktive Scrollbox holen (eigene Funktion)
if Assigned(ActiveSB) then begin
SBDC := GetDC(ActiveSB.Handle);
// GetViewportExtEx(SBDC, OSize);
SetMapMode(SBDC, MM_ISOTROPIC);
SetWindowExtEx(SBDC, 4, 4, nil); // mal zum testen fest eingestellt
SetViewportExtEx(SBDC, 100, 100, nil);
Res := GetWindowExtEx(SBDC, OSize);
if not Res then // mal schauen, was draus geworden ist
MessageDlg(Format('Error Size: %d, %d', [OSize.cx, OSize.cy]), mtInformation, [mbOK], 0)
else
MessageDlg(Format('Size: %d, %d', [OSize.cx, OSize.cy]), mtInformation, [mbOK], 0);
end;
end;
Ich hab zwischenzeitlich geprüft, ob die Funktionen ohne Fehler ausgeführt werden. Ist so, liefern True zurück (hab nur etwas aufgeräumt).
Ja, entweder ich bin total auf dem Holzweg und das geht alles überhaupt nicht mit SetViewportExtEx und Konsorten, oder ich mache nur etwas mit der Verwendung der Funktionen falsch. Ich geb aber auch zu, dass ich durch die Thematik SetViewportExtEx, SetWindowExtEx und SetScaleportExtEx noch nicht durchgestiegen bin. Was benutzt man was wofür?
Im Anhang mal ein Screenshot damit man sieht was ich zoomen will. Es jeht um den jeweils sichtbaren Bereich einer ausgewählten Scrollbox.
Tja, entweder ich hab ein Grundsatz- oder ein Teilpproblem. Sicher bin ich mir auf jeden Fall, dass ich ein Problem habe, denn es tut sich nichts.
Schon mal Dank für die Hilfe,
Guß oki