Delphi-PRAXiS

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/)
-   -   Zum markierten Objekt scrollen in einer Scrollbox (https://www.delphipraxis.net/84572-zum-markierten-objekt-scrollen-einer-scrollbox.html)

mimi 18. Jan 2007 16:48


Zum markierten Objekt scrollen in einer Scrollbox
 
Hallo,
ich habe da ein problem und zwar habe ich eine liste wo objekte drin stehen(eigene) Trechteck, TKreis und soweiter.... wenn ich da doppelt draufklicke möchte ich gerne zum makierten obejkt springen... leider macht folgender code garnichts:
Delphi-Quellcode:
  if Paint2main.liste.selobject <> NIL then begin
    with Paint2main.liste.selobject do begin
      (PageControl2.ActivePage.Controls[0] as TScrollBox).ScrollBy(Position.x,position.y );
      ((PageControl2.ActivePage.Controls[0] as TScrollBox).Controls[0] as TPanel).Invalidate;

      paint2main.asf:=(PageControl2.ActivePage.Controls[0] as TScrollBox).Canvas.ClipRect;
    end;
  end;
den befehl ScrollBy habe ich aus dem forem dank der such funktion gefunden.... aber ich komme einfach nicht weiter !
kann mir da jemmand weiter helfen ???

achja ich arbeitet unter linux mit lazarus - sollte aber trozdem funktnienrn denke ich oder ? bzw. sollte kein größers problem dastellen !!
da lazarus fast so funktniert wie Delphi

[edit=MrSpock]Schreibfehler in Überschrift korrigiert. Mfg, MrSpock[/edit]

marabu 18. Jan 2007 19:01

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Hallo Michael,

mit Delphi würde ich etwa so vorgehen:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
begin
  // die drei auf der ScrollBox verteilten Memos
  // in die ListBox eintragen:
  with ListBox.Items do
  begin
    AddObject('Memo1', Memo1);
    AddObject('Memo2', Memo2);
    AddObject('Memo3', Memo3);
  end;
end;

procedure TDemoForm.ListBoxClick(Sender: TObject);
begin
  // Beim Klicken auf einen Memo-Eintrag der ListBox
  // wird das entsprechende Memo in den sichtbaren
  // Bereich gerollt:
  with ListBox do
    ScrollBox.ScrollInView(TControl(Items.Objects[ItemIndex]));
end;
Freundliche Grüße

mimi 18. Jan 2007 19:21

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Danke für deine Antwort !
leider kennt meine Scrollbox die "methode: ScrollInView" nicht !

Union 18. Jan 2007 19:29

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Soviel zu Lazarus. Dann musst Du es manuell programmieren, hier mal ein Beispiel:
Delphi-Quellcode:
procedure TForm1.ScrollInView(Sender : TScrollBox; Fach: TFach);
var
  Rect: TRect;
begin
  if Fach = nil then Exit;
  with Sender do
  begin
     Rect := Classes.Rect(trunc(Fach.x/Fach.scale),trunc(Fach.y/Fach.scale),trunc(Fach.Right/Fach.scale), trunc(Fach.Bottom/fach.scale));
     Dec(Rect.Left, HorzScrollBar.Margin);
     Inc(Rect.Right, HorzScrollBar.Margin);
     Dec(Rect.Top, VertScrollBar.Margin);
     Inc(Rect.Bottom, VertScrollBar.Margin);

     Rect.Left := Rect.Left + PaintBox1.ClientOrigin.X - ClientOrigin.x;
     Rect.Top := Rect.Top + PaintBox1.ClientOrigin.Y - ClientOrigin.Y;

     if Rect.Left < 0 then
       with HorzScrollBar do Position := Position + Rect.Left
     else if Rect.Right > ClientWidth then
     begin
       if Rect.Right - Rect.Left > ClientWidth then
         Rect.Right := Rect.Left + ClientWidth;
       with HorzScrollBar do Position := Position + Rect.Right - ClientWidth;
     end;
     if Rect.Top < 0 then
       with VertScrollBar do Position := Position + Rect.Top
     else if Rect.Bottom > ClientHeight then
     begin
       if Rect.Bottom - Rect.Top > ClientHeight then
         Rect.Bottom := Rect.Top + ClientHeight;
       with VertScrollBar do Position := Position + Rect.Bottom - ClientHeight;
     end;
  end;
end;
Das Fach-Objekt musst Du dann eben durch Deine gewünschte Objektklasse ersetzen.

mimi 18. Jan 2007 19:49

Re: Zum makierten objekt Scrollen in einer scorllbox
 
gibt er in diesen qullcode:
Delphi-Quellcode:
     Dec(Rect.Left, HorzScrollBar.Margin);
     Inc(Rect.Right, HorzScrollBar.Margin);
     Dec(Rect.Top, VertScrollBar.Margin);
     Inc(Rect.Bottom, VertScrollBar.Margin);
eine fehlermeldung aus das ist margin nicht gibt !
VIELEN DANK FÜR DEINE ANTWORT

Union 18. Jan 2007 20:23

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Wenn die Lazarus-Scrollbar-Objekte keinen Margin haben, dann verscuh eben den irgendwie zu ermitteln oder setze ihn konstant ein (z.b. 2).

mimi 18. Jan 2007 20:49

Re: Zum makierten objekt Scrollen in einer scorllbox
 
ist Margin der abstand zwischen den komponenten oder was genau speichert diese vairbale ?

Union 19. Jan 2007 13:24

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Ja. Standardmäßig ist der in einer VCL-Scrollbox auf 0 gesetzt.

mimi 19. Jan 2007 13:37

Re: Zum makierten objekt Scrollen in einer scorllbox
 
vielen dank für den tip !l also werde ich einfach eine lockale variable defnieren und mit 0 installisieren !

Union 19. Jan 2007 13:38

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Oder Du läßt es einfach weg ;)

mimi 19. Jan 2007 13:45

Re: Zum makierten objekt Scrollen in einer scorllbox
 
was muss ich den bei Scale einsetzten ?

Union 19. Jan 2007 13:48

Re: Zum makierten objekt Scrollen in einer scorllbox
 
Den Wert 1. Das angegebene Beispiel stammt aus einem Wegeoptimierungsprogramm. Der Wert Scale gibt bei meinen Objekten einen Faktor an, mit dem die Darstellung stufenlos vergrößert oder verkleinert werden kann.

mimi 19. Jan 2007 14:02

Re: Zum markierten Objekt scrollen in einer Scrollbox
 
d.h. das heißt wenn ich den wert auf 1 stelle !
werde ich gleich mal verscuhen !

edit:
soweit war ich auch schonmal !

es wird einfach nur die die Scrollbox balken geändert aber leider nicht die sicht !!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.

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