Kolejność 'warstw'

0

Witam,

w jaki sposób w Delphi mogę ustalić, żeby np. Image był nad Buttonem. Wiem, że mogę to zrobić prawym przyciskiem myszy, Control -> Send to back, ale chce to robić w sposób programowy.

Chodzi mi o coś podobnego jak z-index w css.

Pytam się o nie bardzo wiem jak tego szukać.

Pozdrawiam

1

Button1.BringToFront, Button1.SendToBack?

0

A poza tym coś innego, żebym mógł sobie porobić jakby warstwy, że np. wszystkie butony ustawiam sobie na '1', wszystkie obrazki na '2' nad obrazkami itd.

0

nie ma czegoś takiego

0

nawet mi się tego bełkotu MiM komentować nie chce...

0

Ehe i za ten bełkot mój temat poleci mi do kosza, a ja zostanę bez odpowiedzi. Interesuje mnie ułożenie KOMPONENTÓW a nie jakiś obrazków.

0

w pętli sprawdzić Komponenty operatorem IS i jeśli to Image to dać im BringToFront

1

Możesz jeszcze wykorzystać WinAPI, a dokładnie funkcję SetWindowPos, która pozwala w (pewnym sensie) na ustawienie pozycji z-order, a dokładniej na umieszczenie kontrolki bezpośrednio pod inna kontrolką.
Załóżmy, że na formularzu są 3 kontrolki (każda następna przykrywa poprzednią): Edit1, Memo1, Button1. Możesz schować Button1 pod Memo1, ale w dalszym ciągu ten przycisk będzie się znajdował nad kontrolką Edit1:

SetWindowPos(Button1.Handle, Memo1.Handle, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);

Nic więcej niestety nie da się zrobić. Napisali Ci o tym już na początku madmike i Misiekd

1
siekierzyński napisał(a)

Ehe i za ten bełkot mój temat poleci mi do kosza, a ja zostanę bez odpowiedzi. Interesuje mnie ułożenie KOMPONENTÓW a nie jakiś obrazków.

Napisz co chcesz zrobić, bo z pierwszego pytanie wynika że chcesz zrobić TButton z obrazkiem, a to się robi łatwiej : )

Poza tym co to za biadolenie że nie ma warstw. Dla każdego komponentu nadaj sobie Tag który będzie równy w Twojej nomenklaturze "warstwie", i jak trzeba przenieść warstwę na wierzch to For i := 0 to ComponentCount - 1 do If Components[i].Tag = aWarstwa then Components[i].BringToFront ...

b

0

Niech będzie Label nad Buttonem, bo image wprowadza za dużo zamieszania.

b0bik, twój pomysł jest chyba najlepszy. Przetestuję go.

0

b0bik, to dalej nie są warstwy, to tylko pomysł jak takie warstwy symulować. Fajne do zabawy... Łatwo się 'machnąć'...

siekierzyński, napisz w końcu co chcesz zrobić - zawsze można znaleźć inne wyjście.

Edit: tu "stanami początkowymi" będzie to, jak komponenty rzucono na formę. Przykładowo, jeśli dam na formę button, image, button, image - to określenie do jakiej "warstwy" ma należeć muszę dokonać metodą "czy już jest pod, czy już jest nad".

0

Dobra, wygraliście, po wiem wam co kombinuję. Chce sobie stworzyć własny 'theme' programu. Mam tu taki obraz, który tnę sobie na kawałki, potem wstawiam do różnych Image.
user image
Po co mi warstwy? Mianowicie ja poszczególne elementy pokazuje i chowam za pomocą .Hide i .Show. Ale, żeby nie było efektu migotania, to np. ten pomarańczowy przycisk w normalnym stanie położenia, po najechaniu przykrywam nową grafiką. Jak z jadę, to odkrywam ta poprzednią.

0

:D masakra :D

Jeśli już musisz to robić w ten sposób, to zamiast "przykrywania" ładuj do tego image obrazek odpowiedni dla stanu tego "przycisku" (z pliku, z zasobów) . Zamiast trzech TImage z różną zawartością potrzebujesz jeden TImage i trzy obrazki np. ButtonOn.jpg, ButtonOver.jpg, ButtonOff.jpg - odpowiednio do "stanu" wybierasz jeden z nich i "podmieniasz poprzez "LoadFromFile", "LoadFromStream" itp.

Efekt migotania? Ustaw dla formy ''Form1.DoubleBuffered' := true;'

0

Wiem, że masakra xD

To muszę zobaczyć jak z zasobów to ładować, bo cały program chce zawrzeć w jednym pliku, żeby nie rozpakowywać tego do jakiegoś folderu.

0

Zasoby to nie problem. Zacznij sobie to robić na bazie obrazków ładowanych z dysku - łatwiej je edytować, poprawiać, dopasowywać - kiedy będziesz miał to jakoś "ogarnięte", wtedy przejdziesz z tym wszystkim do zasobów.

0
madmike napisał(a)

b0bik, to dalej nie są warstwy, to tylko pomysł jak takie warstwy symulować. Fajne do zabawy... Łatwo się 'machnąć'...

Lepszy rydz niż nic.
b

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.