![]() |
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)? |
AW: Komponenten verschieben
Packe sie auf eine Containet-Komponente ( z.B. einen Panel)
|
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).
|
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).
|
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 ![]() |
AW: Komponenten verschieben
Falls du bereits Jedi nutzt, kannst du das TJvPanel nehmen und auf Transparent:=True setzen
|
AW: Komponenten verschieben
Ganz schnell und billig... Nutze z.B. die Tag-Eigenschaft (ist für sowas vorgesehen)...
Delphi-Quellcode:
Dann hast du nur noch eien Zeile
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;
Delphi-Quellcode:
.
MovedTaggedComponents(Form1,1,-10,50); . |
AW: Komponenten verschieben
Zitat:
|
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 |
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 12:04 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