Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Reihenfolge von TImages (https://www.delphipraxis.net/5169-reihenfolge-von-timages.html)

Minz 26. Mai 2003 13:42


Reihenfolge von TImages
 
Hallösche,

weiß jemand, wie die Reihenfolge von TImages organisiert wird?

Also wenn ich 2 Images habe, wie kann ich dann festlegen (auch
nachträglich) das Image2 über Image1 gemalt wird und umgekehrt.

Am Anfang ist die Reihenfolge glaub ich die Reihenfolge, in der
die Images erstellt wurden oder?

Vielen Dank schonmal
Minz

sakura 26. Mai 2003 13:55

Im Quelltext das Image, welches "oben" sein soll mit
Delphi-Quellcode:
Image1.BringToFront;
ansteuern, im Form-Designer mit der rechten Maustaste auf das Bild klicken und den entsprechenden Befehl aus dem PopUp-Menü benutzen.

[Edit]...:cat:...[/Edit]

Minz 26. Mai 2003 13:58

Danke, habs noch nicht getestet, aber mir scheint,
dass es dann mit mehreren übereinanderliegenden Images Probleme
geben könnte.

Wenn ich dann 3 Images habe, und den 3. bringtofront mache,
dann liegt der vermutlich über image1 und image2.

Was ist wenn ich den nur eine Ebene höher haben möchte,
also Reihenfolge: von 3 2 1 auf 2 3 1
1 soll nachwievor oben liegen.

sakura 26. Mai 2003 14:52

Die direkten Methoden zum Neu-Ordnen (SetZOrder und SetZOrderPosition) sind leider nicht erreichbar, da diese als protected bzw. als private deklariert sind. Aber folgende Funktion sollte helfen.
Delphi-Quellcode:
procedure MoveControlUpInZOrder(Sender: TObject);
var
  I, Curr: Integer;
  Control: TControl;
  List: TList;
begin
  if Sender is TControl then
  begin
    // sender kann z-order ändern
    Control := Sender as TControl;
    // sender ist einer Control (zur Darstellung) zugeordnet
    if Control.Parent = nil then
      // nee
      Exit;
    // position der control ermitteln
    Curr := -1;
    for I := 0 to Pred(Control.Parent.ControlCount) do
      if Control.Parent.Controls[I] = Sender then
      begin
        Curr := I;
        Break;
      end;
    if Curr < 0 then
      // hm, position nicht gefunden
      Exit;
    List := TList.Create;
    try
      for I := Curr + 2 to Pred(Control.Parent.ControlCount) do
        // die restlichen controls merken
        List.Add(Control.Parent.Controls[I]);
      // control nach vorne bringen
      Control.BringToFront;
      for I := 0 to Pred(List.Count) do
        // die restlichen controls wieder vorholen
        TControl(List[I]).BringToFront;
    finally
      List.Free;
    end;
  end;
end;
...:cat:...

Minz 26. Mai 2003 15:02

Hi schonmal Danke,

sehe ich das jetzt richtig?

Ich muss dafür folgendes machen:

type TmeinImage=class(TImage)

und füge die Prozedur MoveControlUpInZOrder als Methode
hinzu.

Dann kann ich:

var Bild1: TmeinImage

Bild1.MoveControlUpInZOrder verwenden.

Sag bitte ja :mrgreen:

sakura 26. Mai 2003 15:09

Nein :-)

Du kannst die Prozedure direkt einsetzen und für alle Controls nutzen. ;-) Etwas ausführlicher habe ich es mal eben hier beschrieben: http://www.delphipraxis.net/viewtopic.php?t=5746

...:cat:...

P.S. Wenn noch Fragen bestehen, weiterhin diesen Thread nutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz