Delphi-PRAXiS
Seite 2 von 3     12 3      

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/)
-   -   Delphi Statisches BG in ScrollBox (https://www.delphipraxis.net/179181-statisches-bg-scrollbox.html)

DeddyH 19. Feb 2014 14:52

AW: Statisches BG in ScrollBox
 
Es geht darum, in einer ScrollBox einen statischen Hintergrund (eine Grafik) zu haben, auf dem die anderen Elemente scrollen, wie auch auf div. Webseiten zu sehen.

baumina 19. Feb 2014 14:54

AW: Statisches BG in ScrollBox
 
Wenn du dir das Beispiel anpasst, müsste das klappen: How to create a TScrollBox with its own background

BLin4ik 19. Feb 2014 15:26

AW: Statisches BG in ScrollBox
 
Liste der Anhänge anzeigen (Anzahl: 1)
@DeddyH genau das meinte ich
@baumina hatte ich schon versucht, da geht der BG immer noch mit

Hab mal eben eine Skizze gemacht diese nummeriert und angehangen.

Folgende Situation:

Die TScrollBox ist von der Größe beschränkt und hat die Größe von 870x305.
Nun wurde das TImage mit einem Bitmap in die TScrollBox anbgelegt.
Die Ausrichtung von dem TImage ist NICHT alClient sondern auf AlNone.
Das Bitmap an sich ist 1920x1200 groß und das TImage hat die Länge und Breite
von TScrollBox übernommen. Es wurde kein Stretch eingstellt.
Das führt dazu dass wir nur einen kleinen Teil des Bitmaps sehen,
das ist auch so gewollt.

Nun wird noch eine TPaintBox abgelegt und ich berechne die Höhe von TPaintBox und diese ist höher
als die vom Bitmap. (Siehe 3 und 2)

Wenn ich nun über das TImage hinausscrolle, ist danach Schluss mit dem
Bitmap.

deswegen möchte ich nur einen Teil bis zum Maximum der ScrollBar immer Konstant anzeigen,
sodass immer der gleiche Teil des Bitmaps mitläuft und nie endet.(siehe 1)

Also soll das TImage als unveränderbares BG fungieren.

DeddyH 19. Feb 2014 15:32

AW: Statisches BG in ScrollBox
 
Sollen die Wolken nun mitscrollen oder nicht? Ich dachte ja, ich hätte verstanden, was Du willst, bin mir jetzt aber auch nicht mehr sicher.

BLin4ik 19. Feb 2014 15:34

AW: Statisches BG in ScrollBox
 
Zitat:

Zitat von DeddyH (Beitrag 1248571)
Sollen die Wolken nun mitscrollen oder nicht? Ich dachte ja, ich hätte verstanden, was Du willst, bin mir jetzt aber auch nicht mehr sicher.

Nein sollen sie nicht :stupid:

DeddyH 19. Feb 2014 15:43

AW: Statisches BG in ScrollBox
 
Dann nimm doch mal das gepostete Beispiel und lass die gesamte Positionsberechnung einfach weg, dann sollte es nach kurzem Überfliegen eigentlich klappen.

BLin4ik 19. Feb 2014 15:58

AW: Statisches BG in ScrollBox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Naja ganz weglassen kann ich sie an der Stelle nicht, dann würde
es ja gar nicht gezeichnet werden.

Krieg das leider auch nicht so gewünscht hin.

Delphi-Quellcode:
procedure TMyScrollBox.Painting;
var
  FDrawHeight, FDrawWidth: Integer;
  Row, Column, xl, xt, xw, xh: Integer;
  xdl, xdt: Integer;
  xRect: TRect;
  i: integer;
  xhdl: Word;
begin
  if (FNHBitmap.width <> 0) and (FNHBitmap.Height <> 0) then
  begin
    xRect := ClientRect;
    FDrawHeight := xRect.Bottom - xRect.Top;
    FDrawWidth := xRect.Right - xRect.Left;
    xdl := (HorzScrollBar.Position mod FNHBitmap.Width);
    xdt := (VertScrollBar.Position mod FNHBitmap.Height);
    for Row := 0 to (FDrawHeight div FNHBitmap.Height) + 1 do
    begin
      for Column := 0 to (FDrawWidth div FNHBitmap.Width) + 1 do
      begin
        xl := Column * FNHBitmap.Width + xRect.Left - xdl;
        xt := Row * FNHBitmap.Height + xRect.Top - xdt;
        xw := FNHBitmap.Width;
        if (FDrawWidth - xl + xRect.Left) < xw then
          xw := (FDrawWidth - xl + xRect.Top);
        xh := FNHBitmap.Height;
        if (FDrawHeight - xt + xRect.Top) < xh then
          xh := (FDrawHeight - xt + xRect.Top);
     
        (*  FNHCanvas.CopyRect(
          Rect(xl, xt, xl + xw, xt + xh),
          FNHBitmap.Canvas,
          Rect(0, 0, xw, xh)*)
         

          // Kopiert immer gleichen Bereich und fügt ein
          FNHCanvas.CopyRect(
          Rect(0, 0, xw, xh),
          FNHBitmap.Canvas,
          Rect(0, 0, xw, xh)        

        );
      end;
    end;
  end;
end;

DeddyH 19. Feb 2014 17:27

AW: Statisches BG in ScrollBox
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe etwas herumprobiert (mit Delphi 5 unter Win 8.1), und hier ist zumindest mal ein Ansatz.

BLin4ik 20. Feb 2014 10:56

AW: Statisches BG in ScrollBox
 
Das ist schon eine sehr gute Lösung!

Habe es eben mal ausprobiert ohne weiteres läuft es sehr gut,
nur leider sieht es mit den weiteren Inhalten in der Scrollbox einwenig schlecht aus.
Ich habe ja zusätzlich noch eine Paintbox mit liegen, die auch ihre Sachen zeichnet.
Und nach jedem Scrollen wird ja immer neugezeichnet, dann wirkt sich auf die
Anzeige der Paintbox aus -> Flakkern nach jedem Scrollvorgang.
Da hilft ein Doublebuffered auch nicht mehr.

DeddyH 20. Feb 2014 11:01

AW: Statisches BG in ScrollBox
 
Da hab ich jetzt spontan auch keine rechte Idee dazu.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:34 Uhr.
Seite 2 von 3     12 3      

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