Autor Beitrag
Tendl
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Do 30.06.05 15:40 
Ich habe folgendes Problem:

Ich möchte in einer Scrollbox quadratische Panels anordnen, mehrere Spalten und mehrere
Zeilen. In dem Moment in dem ich aber den Scrollbar verschiebe und dann einfüge wird das Panel nicht in die richtige Zeile sondern versetzt eingefügt, d.h es bleibe ganze Zeilen frei.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
  TForm1 = class(TForm)
    ....
  private
    { Private declarations }
  public
    { Public declarations }
    panels1: TObjectlist;
    constructor create(AOwner: TComponent); override;
  end;


Mit folgender Routine erzeuge ich die Panel-Liste:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
constructor TForm1.create(AOwner: TComponent);
begin
   inherited create(AOwner);
   panels1 := TObjectlist.create;
   panels1.OwnsObjects:=true;
end;


Mit folgender Routine erzeuge ich zur Laufzeit die Panels:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Add1Click(Sender: TObject);
var new_panel:TPanel;
    index:integer;
begin
  new_panel:=TPanel.Create(form1.ScrollBox1);
  // Hier werden Größe und Farbe festgelegt
  new_panel.Height:=50;
  new_panel.Width:=50;
  new_panel.Color:=clwhite;
  // Hier wird der Parent definiert und das Panel in eine Liste eingetragen
  new_panel.Parent:=form1.ScrollBox1;
  panels1.Add(new_panel);
  index:=panels1.Count-1;
  // Hier erfolgt die Positionierung, Parameter ist die Anzahl der vorhandenen Panels
  // Angeordnet werden die Panels in 3 Spalten und x Zeilen   
  new_panel.Top:= ((index div 3)*70)+20;
  new_panel.left:= ((index mod 3)*70)+20;
end;


Meine Scrollbox wird nur Horizontal gescrollt und wenn ich das tue und anschließend ein
weiteres Panel einfüge so bleibt der Leerraum stehen.

Es ist egal ob ich die Orginal Delphi 7 Komponente oder die Jedi-Kompo nehme.

Im Moment habe ich keine Ahnung, wie ich das Problem in den Griff kriegen kann.

Weiß jemand Rat?

Danke Thomas
Tendl Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 117



BeitragVerfasst: Fr 01.07.05 14:03 
Ich habe das Problem selbst gelöst, schaut für mich aber eher wie ein Work-Around aus als nach einer sauberen Lösung:



ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
procedure TForm1.Add1Click(Sender: TObject);
var new_panel: TPanel;
  index: integer;
  offset: Tpoint;
begin
  new_panel := TPanel.Create(form1.ScrollBox1);
  new_panel.Height := 50;
  new_panel.Width := 50;
  new_panel.Color := clwhite;
  new_panel.Parent := form1.ScrollBox1;
  panels1.Add(new_panel);
  index := panels1.Count - 1;
  if scrollbox1.HorzScrollBar.Visible then
    offset.X := scrollbox1.HorzScrollBar.Position
  else
    offset.X := 0;
  if scrollbox1.VertScrollBar.Visible then
    offset.y := scrollbox1.VertScrollBar.Position
  else
    offset.y := 0;
  new_panel.Top := ((index div maxcol) * 70) + 20 - offset.y;
  new_panel.left := ((index mod maxcol) * 70) + 20 - offset.x;
end;



Man muß also beim Einfügen des Objekts den Offset der Scrollbalken abziehen.

Vielleicht hilft der Schnipsel ja auch noch jemand anderem.

Thomas