Delphi: Wie programm visuelle Reihenfolge von Komponenten mit align = einstellen alTop

StackOverflow https://stackoverflow.com/questions/1259849

  •  12-09-2019
  •  | 
  •  

Frage

Ich habe ein Formular mit einer Anzahl von Platten bekam, von denen jeder hat Align = alTop, so dass sie stapeln unten schön aus dem oberen Rand des Formulars.

Allerdings möchte ich dynamisch das Aussehen Reihenfolge dieser Platten verändern - das heißt, bewegen sie auf und ab. Was ist der beste Weg, dies zu tun?

War es hilfreich?

Lösung

Sie können ganz einfach eine Top-ausgerichtete Platte nach oben bewegen, indem sein Eigenschaft auf 0 . Tun Sie dies in umgekehrter Reihenfolge angefordert (unteres Feld zuerst) und Sie werden getan.

Andere Tipps

Bewegen Sie sie auf die gleiche Weise sie zur Design-Zeit mit der Maus verschieben würde: Legen Sie die Top Eigenschaft des aktuellen Panel eins weniger als die Top Eigenschaft des Panels Sie unter dem aktuellen Panel sein wollen. Die VCL kümmert sich um den Rest.

Wenn Sie mehrere Platten bewegen müssen, beginnen Sie mit BeginDeferWindowPos . Stellen Sie alle Platten, was auch immer Koordinaten Sie mit DeferWindowPos wollen, und dann machen sie alle bewegen sich auf einmal mit EndDeferWindowPos.

Ich schlage vor, einen Rahmen bauen, wo Sie dynamisch entfernen / hinzufügen, die Formen von / an ihre Mutter Kontrolle. Im Allgemeinen ist die Reihenfolge der Erstellung / Ergänzung die visuelle Ordnung, sondern aus Ihrer Frage Ich verstehe Sie die Reihenfolge wollen während des Anwendungslebensdauer zu ändern, so dass nur die ursprüngliche Schöpfung, um genug sein wird, nicht ändern.

Um die Reihenfolge zu ändern, versuchen Sie:

  1. ausblenden die Platten
  2. Entfernen Sie die Platten von ihrer übergeordneten Steuerung
  3. Fügen Sie die Platten an ihre Mutter Kontrolle in der neuen Reihenfolge Sie möchten
  4. Zeigen Sie die Platten

Wie sei es mit einem oberen ausrichte TGridPanel mit einer Spalte versuchen und n Reihen statt --- Nachbestellung oben ausgerichteten Platten ist ein bisschen wie ein Schmerz, wirklich.

(Hinweis: TGridPanel in Delphi 2007 verfügbar ist und nach oben, wenn ich mich richtig erinnere).

Wenn Sie den oberen Rand des Fensters die Reihenfolge der visuell-Panel ändern ändern.

Versuchen Sie, diese (alle Platten ausgerichtet Altop und mit der gleichen Höhe ):

panel0
PANEL1
PANEL2
Panel3
PANEL4

OnClick Falle alle Platten Sie folgendermaßen vor:

 TPanel(Sender).Top := TPanel(Sender).Top - TPanel(Sender).Height - 2;

Wenn Sie auf einem Panel klicken bewegt er sich eine Position nach oben.

Das ist die Idee. Ändern Sie die Top X Pixel.
Zum gleichen, wenn Sie dies tun:

   TPanel(Sender).Top := TPanel(Sender).Top - (TPanel(Sender).Height * 2)- 2; 

Das Panel auf 2 Positionen.

ADDED: Wenn Sie Drag & Drop verwenden, diese Ereignisse die Position (X und Y) zurückkehren; Mit der Ausgangsposition und Endposition können Sie die wew oben für asign an der Platte berechnen.

Excuse Form mein schlechtes Englisch. Grüße

Ich habe den folgenden Code verwendet:

procedure Show_Hide (Flag_Show : boolean);
begin
  if Flag_Show then
  begin
    with Panel_1 do begin Align := alTop; Visible := true; end;
    with Panel_2 do begin Align := alTop; Visible := true; end;
    with Panel_3 do begin Align := alTop; Visible := true; end;
    with Panel_4 do begin Align := alTop; Visible := true; end;
  end else
  begin
    with Panel_1 do begin Visible := false; Align := alNone; end;
    with Panel_2 do begin Visible := false; Align := alNone; end;
    with Panel_3 do begin Visible := false; Align := alNone; end;
    with Panel_4 do begin Visible := false; Align := alNone; end;
  end;
end;

nach meinem Wunsch Panel_1 Panel_2 Panel_3 Panel_4

Ich weiß, ihr eine alte Post, aber im Grunde hat mir geholfen - die Idee, die Top-Eigenschaft auf Null. Ich kann nicht die Idee der programmatisch festlegen die Position Ursache verwenden diese bis zum App-Nutzer ist - es kann wählten einige Diagramme auf der App angezeigt werden und dann alle Platten (Eltern) der die teecharts sind align Altop. Ich habe ihre Top-Eigenschaft auf 0 auf der umgekehrten Reihenfolge und dann nur sichtbar wahr oder falsch gesetzt nach Benutzereingabe ...

Danke.

panel3.Visible  := True;
panel3.Top      := 0;

panel2.Visible  := True;
panel2.Top      := 0;

panel1.Visible  := True;
panel1.Top      := 0;

Der letzte wird der erste.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top