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/)
-   -   Komponenten verschieben (https://www.delphipraxis.net/153439-komponenten-verschieben.html)

Shark99 2. Aug 2010 22:41

Komponenten verschieben
 
Ich habe eine Allgemeine Frage zu Komponenten.

Wenn ich Beispielweise 5 Checkboxes und 5 Buttons habe, kann ich diese irgendwie Gruppieren und zur Runtime mit einer einzigen Zeile Code verschieben (also z.B. um 10 Pixel nach oben)?

mkinzler 2. Aug 2010 22:44

AW: Komponenten verschieben
 
Packe sie auf eine Containet-Komponente ( z.B. einen Panel)

Shark99 2. Aug 2010 23:02

AW: Komponenten verschieben
 
Dass es mit einem Panel geht ist mir klar, ich wollte aber eine allgemeingültige Lösung. Ein Panel ist nicht durchsichtig und deshalb muss man fummeln wenn die Form z.B. eine Grafik als Hintergrund hat (wie in meinem aktuellen Projekt).

Teekeks 2. Aug 2010 23:09

AW: Komponenten verschieben
 
Ich habe eine Idee, Warum schreibst du dir nich selbst eine solche Komponente? Ich kenne auch noch keine die eine solch einfache funktion beherrscht (einfach nur Container sein).

sx2008 3. Aug 2010 00:13

AW: Komponenten verschieben
 
Seltsam, dass es in der VCL keine unsichtbaren Panels gibt.
Man bräuchte diese auch schon allein deswegen um die sichtbaren Controls
gezielt zu gruppieren.
Hier wäre so ein Transparent Panel (Freeware mit Source)

MarcoWarm 3. Aug 2010 07:44

AW: Komponenten verschieben
 
Falls du bereits Jedi nutzt, kannst du das TJvPanel nehmen und auf Transparent:=True setzen

LoCrux 3. Aug 2010 09:05

AW: Komponenten verschieben
 
Ganz schnell und billig... Nutze z.B. die Tag-Eigenschaft (ist für sowas vorgesehen)...

Delphi-Quellcode:
function MovedTaggedComponents(ParentComponent:TComponent;TagID:Integer;dx,dy:Integer):Integer;
var
  i    : Integer;
  Comp : TComponent;
  moved : Integer;
begin
  moved := 0;
  if assigned(ParentComponent)
  then begin

    for i := 0 to ParentComponent.ComponentCount-1
    do begin
      Comp := ParentComponent.Components[i];
      if (Comp is TButton) or (Comp is TCheckbox)
      then begin
        if (Comp.Tag = TagID)
        then with (Comp as TWinControl)
        do begin
          Left := Left+dx;
          Top := Top+dy;
          Update;
          inc(moved);
        end;
      end;
    end;

  end;
  result := moved;
end;
Dann hast du nur noch eien Zeile

Delphi-Quellcode:
  .
  MovedTaggedComponents(Form1,1,-10,50);
  .

Bernhard Geyer 3. Aug 2010 09:11

AW: Komponenten verschieben
 
Zitat:

Zitat von sx2008 (Beitrag 1039148)
Seltsam, dass es in der VCL keine unsichtbaren Panels gibt.

Wieso sollte man Panels nicht "Unsichtbar" machen können? Einfach die Borders deaktivieren und schon gehts. Haben wir hier "ein paar mal" im Einsatz.

mkinzler 3. Aug 2010 09:14

AW: Komponenten verschieben
 
Mit unsichtbar hat er wohl transparent gemeint. das geht aber, wie schon geschrieben mit JVPanel oder anderen Lösungen.

Das mit dem Panel war zudem nur ein Beispiel für eine Container-Komponente

blackfin 3. Aug 2010 09:19

AW: Komponenten verschieben
 
Ich würde das entweder, wie schon gesagt wurde, mit dem Tag-Wert machen, oder, wenns eleganter werden soll, über eine selbsterstellte Containter-Klasse, ähnlich einer Liste, der du zur Laufzeit Objekte hinzufügen und entfernen kannst. (z.B. realisiert über eine TObjectList innerhalb der Klasse)
Diese Klasse ist selbst nicht sichtbar, also keine visuelle Komponente, sondern nur eine Klasse.
Dieser Klasse gibst du dann z.B. eine Funktion Move(x,y), die alle der Klasse hinzugefügten Objekte (alle Objekte in der internen TObjectList) um x/y verschiebt.
Damit bist du dann insgesamt flexibler, da du Objekte entfernen kannst und welche hinzufügen, ohne dass du mit dem unübersichtlichen Tag-Wert rumfummeln müsstest.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 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