3. Achse nutzen?

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

3. Achse nutzen?

Beitrag von hendy »

Ich wollte generell mal nachfrfagen, ob es sowas iwe eine 3. Axe für componenten gibt, auf die ich dynamisch zugreifen kann.
Ich stelle mir das inetwa so vor

Code: Alles auswählen

AComponent.Deep:=8;
BComponent.Deep:=9;

Damit wäre A vor B, und nicht, wenn man sie nacheinander dynamisch erstellt B vor A :|
Zuletzt geändert von hendy am Di 20. Okt 2009, 14:50, insgesamt 1-mal geändert.
Dankt monta !!

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: 3. Axe nutzen?

Beitrag von Targion »

Aah.. Achse!
Was willst du eigentlich machen? Im Designer kannst du der Z-Achse setzen.

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: 3. Axe nutzen?

Beitrag von hendy »

ups, da hab ich wohl geschlafen-;)
Nein, kann ich mit dynamischen Panels nicht.
Dankt monta !!

monta
Lazarusforum e. V.
Beiträge: 2809
Registriert: Sa 9. Sep 2006, 18:05
OS, Lazarus, FPC: Linux (L trunk FPC trunk)
CPU-Target: 64Bit
Wohnort: Dresden
Kontaktdaten:

Re: 3. Achse nutzen?

Beitrag von monta »

BringToFront und SendToBack?

portal.php?cx=libsearch&query=SendToBack

(immer diese Parfüm-Werbung :lol: )
Johannes

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: 3. Achse nutzen?

Beitrag von Scotty »

Weil ich so etwas in meinem Projekt verwende, kann ich Dir etwas Code posten. Ich habe verschiebbare und größenveränderliche Panels auf meinem Hauptformular (eine Art MDI-Anwendung, die auch unter Linux funktioniert) und da ist es nicht sinnvoll, wenn größere Panels kleinere überdecken. Deshalb löst das Panel ein Event (OnSortPanel) aus, wenn die Maustaste losgelassen resp. OnMouseUp) wird. Dieses Event verbinde ich dynamisch mit folgendem Code.

Code: Alles auswählen

pn2D:=TMoveablePanel.Create(...
pn2D.OnSortPanel:=@DoApplyZOrder;
...
procedure TfmMain.DoApplyZOrder(Sender: TObject)//Sender=MoveablePanels.SortPanels
var aSizeOrder:array of TSizeOrder; //utypes (siehe unten)
begin
  if not (gsLoading in Scrabble.GameState) then
  begin
    setlength(aSizeOrder,4);
    try
      with aSizeOrder[0] do begin Panel:=pn2D.Target; Size:=pn2D.Size; end;
      with aSizeOrder[1] do begin Panel:=pn3D.Target; Size:=pn3D.Size; end;
      with aSizeOrder[2] do begin Panel:=pnPieces.Target; Size:=pnPieces.Size; end;
      with aSizeOrder[3] do begin Panel:=pnMessages.Target; Size:=pnMessages.Size; end;
      SortWindowZOrder(aSizeOrder);//utypes
    finally
      Setlength(aSizeOrder,0);
    end;
  end;
end;
--------
type TSizeOrder=record
          Size  : integer;
          Panel : TControl;
        end;
 
function DoSort(Item1:Pointer;Item2: Pointer):Integer;
begin
  if TSizeOrder(Item1^).Size=TSizeOrder(Item2^).Size then
   Result:=0 else
    if TSizeOrder(Item1^).Size>TSizeOrder(Item2^).Size then
     Result:=-1 else
      Result:=1;
end;
 
procedure SortWindowZOrder(aValue: array of TSizeOrder);
var SizeOrder : ^TSizeOrder;
    i         : integer;
begin
  with TList.Create do
  try
    for i:=0 to length(aValue)-1 do
    begin
      New(SizeOrder);
      SizeOrder^.Panel:=aValue[i].Panel;
      SizeOrder^.Size:=aValue[i].Size;
      Add(SizeOrder);
    end;
    Sort(@DoSort);
    while Count>0 do
    begin
      SizeOrder:=Items[0];
      SizeOrder^.Panel.BringToFront;
      Dispose(SizeOrder);
      Delete(0);
    end;
  finally
    Free;
  end;
end;

hendy
Beiträge: 80
Registriert: Sa 11. Apr 2009, 17:01
OS, Lazarus, FPC: Windoof (L 0.9.26 FPC 2.2.2)
CPU-Target: 32Bit

Re: 3. Achse nutzen?

Beitrag von hendy »

Danke erstmal und jetzt UFF, da muss ich mich erstmal durcharbeiten
Dankt monta !!

Antworten