Delphi-PRAXiS
Seite 1 von 2  1 2      

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 ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 Uhr.
Seite 1 von 2  1 2      

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