Thema: Delphi DelphiX + Scrollbar

Einzelnen Beitrag anzeigen

Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

DelphiX + Scrollbar

  Alt 17. Nov 2005, 16:06
Hi,

Ich habe einen RPG-Editor programmiert. Wenn das Level jetzt nicht ganz auf den Bildschirm passt benutze ich Scrollbars. Das funktioniert auch - einmal. Denn wenn man danach noch eine große Map erstellt, wo man die Scrollbars braucht, dann funktionieren die nicht mehr richtig.. Sie Scrollen nicht weit genug..

Quelltext:

Neue Map erstellen:
Delphi-Quellcode:
procedure TForm1.NeueMap1Click(Sender: TObject);
begin
  Form2.ShowModal; // Einstellungen
  World.Engine.Engine.X := 0; // An die Ausgangsposition gehn
  World.Engine.Engine.Y := 0;
  m1 := (World.lWidth)-(World.DXDraw.Width div 32); // Max von Horizontaler Scrollbar ausrechnen
  m2 := (World.lHeight)-(World.DXDraw.Height div 32); // Min von Vertikaler Scrollbar ausrechnen
  if m1 > 0 then begin // Wenn die Horizontale Scrollbar gebraucht wird...
   DoScroll1 := 1; // nicht wichtig..
   ScrollBar1.Min := 0;
   ScrollBar1.Position := 0;
   ScrollBar1.Max := m1;
  end
  else begin
   DoScroll1 := 0;
   ScrollBar1.Min := 1;
   ScrollBar1.Max := 1;
  end;
  if m2 > 0 then begin // Wenn die Horizontale Scrollbar gebraucht wird...
   DoScroll2 := 1;
   ScrollBar2.Min := 0;
   ScrollBar2.Position := 0;
   ScrollBar2.Max := m2;
  end
  else begin
   DoScroll2 := 0;
   ScrollBar2.Min := 1;
   ScrollBar2.Max := 1;
  end;
end;
ScrollbarChange
Delphi-Quellcode:
procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode;
  var ScrollPos: Integer);
begin
if ScrollBar1.Max <> ScrollBar1.Min then begin
  if ScrollPos > ScrollAlt1 then begin
   World.Engine.Engine.X := World.Engine.Engine.X - 32;
  end;
  if ScrollPos < ScrollAlt1 then begin
   World.Engine.Engine.X := World.Engine.Engine.X + 32;
  end;
  ScrollAlt1:= ScrollPos;
end;
end;
Und damit die Scrollbar sich der Form anpasst:

Delphi-Quellcode:
procedure TForm1.FormResize(Sender: TObject);
begin
 m1 := (World.lWidth)-(World.DXDraw.Width div 32);
 m2 := (World.lHeight)-(World.DXDraw.Height div 32);
end;
Ich weiß nicht warum das nicht funktioniert -.-
Bei der ersten Map die ich erstelle funktionierts und bei der zweiten nicht mehr..
Michael
  Mit Zitat antworten Zitat