Odpowiedź w ankiecie. Ustawianie kolejności za pomocą przesuwanych box-ów.

0

Witam kolegów i koleżanki,

Trafiłem na problem. Robię programik w którym, w pewnym momencie będę chciał ustalić kolejność na 4 odpowiedzi.

Pomyślałem sobie że najlepszym rozwiązaniem będzie np. TPanel a na nim 4 kolorowe panele których kolejność ustalę przesuwając je myszką.
Okazało się że nie mam pojęcia jak to zrobić, dlatego proszę Was o jakąś sugestię jak się za to zabrać.

Na pewno panele nie mogą na siebie nachodzić, super by było jakby udało się osiągnąć efekt przyklejania po zbliżeniu do miejsca docelowego.

A może jest do tego jakiś komponent?

Pozdrawiam
Robert

0

Pomyślałem sobie że najlepszym rozwiązaniem będzie np. TPanel a na nim 4 kolorowe panele których kolejność ustalę przesuwając je myszką.

Jak dobrze rozumiem, zależy Ci na polu z kafelkami, w którym te kafelki można przeciągać metodą drag and drop, coś jak na stronie startowej w przeglądarkach. Nie będzie to łatwe w implementacji - sam nie napiszesz czegoś takiego, a wątpię, abyś ktoś zrobił to w całości za Ciebie.

Kiedyś robiłem coś podobnego na potrzeby odpowiedzi tutaj na forum - komponent, w którego wnętrzu znajdują się wirtualne prostokąty, możliwe do przesuwania po jej powierzchni właśnie za pomocą myszy. Tyle że nie były one sortowane (nie były wyrównywane i nie układały się podczas przeciągania), dlatego że przykład miał dotyczyć tylko i wyłącznie samej obsługi takich wirtualnych elementów i podstawowego przesuwania.

W razie czego możesz zobaczyć do tego wątku i sprawdzić ten przykład, znajduje się tutaj - Przesuwanie obrazka po canvas (drugi porzykład znajduje się w ostatnim poście w tym wątku - prostokąty są przesuwane bezpośrednio, zamiast obsługi dodatkowej ramki, całość odmalowywana w czasie rzeczywistym). Kod napisany jest we Free Pascalu, jednak po niedużych przeróbkach da się go skompilować pod dowolnym Delphi.

A może jest do tego jakiś komponent?

A szukałeś jakiegoś komponentu?

0

no tak, napisanie tego od podstaw nie będzie proste. Komponentu też szukałem ale ciężko opisać czego szukam więc i ciężko coś znaleźć. Jednak zauważyłem że chyba ToolBar częściowo spełni moje oczekiwania. Jedyny problem że będę miał przesuwane "kafelki" w poziomie a nie pionie ale trudno, jakoś to przeżyję. Właśnie mu się przyglądam.

0

Użyj komponentu klasy TListBox i dodaj do niego obsługę przeciągania pozycji. Tutaj nawet masz krótki tutorial - Drag and Drop - tylko zamiast Items.Delete i Items.Insert użyj po prostu Items.Move.

A jeśli zależy Ci na ładniejszym wyglądzie pozycji to wyłącz obramowanie kontrolki, dostosuj rozmiar do sumy wysokości wszystkich odpowiedzi i obsłuż zdarzenie OnDrawItem, uprzednio ustawiając Style na lbOwnerDrawFixed.

0

hmm, kurcze że wcześniej na to nie wpadłem. Rzeczywiście ten komponent może być idealny. Dzięki za sugestie.

0

Umiejętnie ustawiając styl kontrolki i oprogramowując zdarzenie OnDrawItem, możesz sprawić, że komponent ten w ogóle nie będzie przypominał ListBox.

0

już nad tym pracuję i jest duża szansa że spełni on moje oczekiwania. Poinformuję o efektach, może się komuś przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1