Ĺadny brzuch
Na początku chcę napisać, że na Delphi jeszcze się zbytnio nie znam, więc moje pytania mogą być wręcz głupie...
Właśnie tworzę program, będący "wirtualną wycieczką" po mojej szkole. Ma to działać tak, że mamy formę, na której jest zdjęcie. Na zdjęciu jest kilka przycisków. W zależności, na który naciśniemy, przechodzimy na zdjęcie np. na lewo lub na prawo od miejsca, które pokazywał poprzedni obrazek - przy czym zawsze możemy się cofnąć do poprzedniego miejsca.
Rozumiem, że muszę stworzyć nową formę do każdego obrazka (bo zmienia się i obrazek, i "adresy" przycisków na nim się znajdujących), tak?
Na razie mój porgram wygląda tak, że po naciśnięciu przycisku otwiera się nowe okno z obrazkiem. Nie wygląda to zbyt efektownie. Przecież użytkownicy mieliby wtedy albo kilkadziesiąt (pod koniec działania programu) otwartych okienek, albo musieliby co chwilę zamykać poprzednie okno.
Proszę o pomoc - jak zrobić, żeby to wszystko było w jednym okienku, po prostu zmieniałyby się widziane obrazki i adresy przycisków?
Na początku chcę napisać, że na Delphi jeszcze się zbytnio nie znam, więc moje pytania mogą być wręcz głupie...
Właśnie tworzę program, będący "wirtualną wycieczką" po mojej szkole. Ma to działać tak, że mamy formę, na której jest zdjęcie. Na zdjęciu jest kilka przycisków. W zależności, na który naciśniemy, przechodzimy na zdjęcie np. na lewo lub na prawo od miejsca, które pokazywał poprzedni obrazek - przy czym zawsze możemy się cofnąć do poprzedniego miejsca.
Rozumiem, że muszę stworzyć nową formę do każdego obrazka (bo zmienia się i obrazek, i "adresy" przycisków na nim się znajdujących), tak?
Na razie mój porgram wygląda tak, że po naciśnięciu przycisku otwiera się nowe okno z obrazkiem. Nie wygląda to zbyt efektownie. Przecież użytkownicy mieliby wtedy albo kilkadziesiąt (pod koniec działania programu) otwartych okienek, albo musieliby co chwilę zamykać poprzednie okno.
Proszę o pomoc - jak zrobić, żeby to wszystko było w jednym okienku, po prostu zmieniałyby się widziane obrazki i adresy przycisków?
ja bym na twoim miejscu stworzyl tablice dwuwymiarowa z adresami obrazkow oraz druga - jednowymiarowa z adresami ostatnio odwiedzonych pol.
I poruszalbym sie po tej tablicy wyswietlajac zdjecie z ostatniego adresu - a dzieki drugiej tablicy nie masz problemu z powrotem :)
@statjacker - pomysl sobie co bedzie przy dwudziestu obrazkach.. a co po stu?
Użytkownik migajek edytował ten post 23 wrzesień 2005, 15:33
@statjacker - pomysl sobie co bedzie przy dwudziestu obrazkach.. a co po stu?
I nawet po dwustu i więcej - a co ma być? Więcej za każdym razem będziesz wyłączał a jeden włączał. To pisze osoba która nie ma doświadczenia w programowaniu w Delphi. Moje rozwiązanie jest proste i skuteczne .
Hmm... dzięki, pobawię się tym. Z tym, że prozpozycje statjacka jako tako rozumiem, a z tymi tablicami... może jakiś link do arta o tym zagadnieniu, coś w tym stylu, migajek? :rolleyes:
EDIT:
http://karton3.cocon...et/Project1.exe - zupełnie robocza wersja, dwa obrazki, propozycja pierwsza (Szybko ściągajcie, bo pewni wkrótce to usuną - to plik .exe). Ciekawie to wygląda, ale jak zrobić, żeby polecenia w buttonach się zmieniły? Chodzi mi po prostu o to:
-------
| ^ |
|< > |
| |
-------
- obrazek, strzałki służą do nawigacji ( np. < - pokazuje co widać, jak spojrzy się w lewo z pierwszej pozycji. Przy naciśnięciu odpowiedniej strzałki zmienia się obrazek i "adresy" przycisków)
Jeśli podacie mi, jak to zrobić z tymi przyciskami, to będzie super. Pozostanie tylko "troszkę" pracy i facet z infy będzie miło zaskoczony :)
Z góry dzięki, fajne to forum :P:P
Użytkownik lukmod edytował ten post 23 wrzesień 2005, 20:59
Delphi nie znam więc wiele ci nie pomoge ale radzę Ci wybrać sposób Migajka. Myślę że było by to dla ciebie wygodniejsze i mniej by program zajął miejsca. Teoretycznie możesz to zrobić tak: Przy starcie programu tworzysz iluś elementową tablicę i wpisujesz do niej nazwy plików. Później tylko do objektu ładujesz plik o odpowiedniej nazwie.
Delphi nie znam więc wiele ci nie pomoge ale radzę Ci wybrać sposób Migajka. Myślę że było by to dla ciebie wygodniejsze i mniej by program zajął miejsca. Teoretycznie możesz to zrobić tak: Przy starcie programu tworzysz iluś elementową tablicę i wpisujesz do niej nazwy plików. Później tylko do objektu ładujesz plik o odpowiedniej nazwie.
Kodu moze być bardzo mało. Wystarczy zrobić procedure globalną w której wszystkie image zostaną wyłączone. A następnie pod nią włączasz tylko jeden image. I Drugi banalnie prosty sposób zrobić jedno image i skopiować wszystkie foto do tego samego katalogu. Następnie wczytywać jeden obrazek do image. Image1.Picture.Bitmap.LoadFromFile('jakis.bmp'); Prosty sposób jest najlepszy
Ja bym akurat ladowal tablice z pliku ale to szczegol :P
ja bym na twoim miejscu stworzyl tablice dwuwymiarowa z adresami obrazkow oraz druga - jednowymiarowa z adresami ostatnio odwiedzonych pol.
...może odrobinkę dokładniej o tym..?
Poza tym, to chyba nie rozwiązałoby problemu z przyciskami. Pytam ponownie, bo nikt mi nie odpowiedział: jak to zrobić, żeby po naciśnięciu przycisku i zmianie obrazka, zmieniły się adresy tegoż i innych przyciksów, ew. powstały też nowe?
To z tym:
imageX.Picture.LoadFromFile('imageX.jpg');
mi ładnie działa, ale byłoby tu przydatne (przynajmniej w wykorzystaniu takim, jak mi to teraz wyszło) na przeglądarkę obrazków, w stylu <przycisk1>parter</przycisk>, <przycisk2>1 piętro</przycisk>, itd...
Jeśli to jakaś różnica, to chcę też dodać, że przyciski mają się czasem znajdować NA obrazku...
Inne pytanie: mogę zrobić przezroczysty obszar w Delphi i ustawić go jako button? Np. ktoś najedzie na jakieś drzwi z obrazka, naciśnie na nie i przejdzie na inny widok, zza tych drzwi itp.?
Kolejne pytanie: co wklepać w kodzie buttona, żeby zmienił się tekst w Label?
w delphi powinny być takie pola które chyba nazywają się Panel przynajmniej w c++ builder były. Wrzć sobie na forme taki panel i ustaw na nim np. 3 przyciski jakie ci tam trzeba. Później kolejny panel i kolejne przyciski. Ustaw wszystkie panele jaki nie widoczne (Panelx->visible = false; <- tak by to było w c++) a później odpowednie panele w odpowiednim czasie ustawiaj jako widoczne.
Hmm...
Dość dobrze mi idzie, robię to z ładowaniem obrazów z katalogu. Z tymi przyciskami to zrobiłem to tak: każdy zestaw dla indywidualnego obrazka znajduje się na oddzielnym GroupBoksie, i gdy naciśniesz jeden przycisk to obrazek sie zmienia, znika GroupBox dla poprzedniego obrazka i pojawia się nowy dla obecnego obrazka.
Ma to jednak te same minusy, jak w tej propozycji z visibility i invisibility przy obrazkach... mam kilka tych groupboxów i już mi sie odechciewa :( ciężko nad nimi będzie zapanować, a wychodzi na to, że będzie musiało ich być ok. 50... Jest na to jakiś dość łatwy sposób?
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?
Prostszy sposob? Jest. Ten ktory podalem :)
//statjacek: a nie mowilem ? :P
Użytkownik migajek edytował ten post 26 wrzesień 2005, 19:35
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?
Bosh ludzie. ale wy nieoptymalne i pamięciożerne rozwiązania tłuczecie :P
a nie lepiej na te obrazki stworzyć listę (zamiast dwóch tablic) dwukierunkową (cykliczną czy nie) a zawartość w group boxach generować dynamicznie? przecież tak niepotrzebnie żżeramy zasoby kompa :/
zawsze można z zasobów ssać :)
bełdzio ma rację. ok jeżeli to jest 15 obrazków. a co będzie jak aplikacja będzie miała bnie 15 a 15000 zdjęc do przechowania? też wrzucicie to do execa?
a tlumaczenia że kolega jest początkujący nie przyjmuję :P bo ci co dłużej tu piszą i mają większe doświadczenie od razu powinni wypleniać błędy jakie by one nie były.
a nie lepiej na te obrazki stworzyć listę (zamiast dwóch tablic) dwukierunkową (cykliczną czy nie) a zawartość w group boxach generować dynamicznie? przecież tak niepotrzebnie żżeramy zasoby kompa :/
No właśnie zastanwiałem się, jak można by automatycznie generować zawartość GroupBoxów. Tylko że za bardzo nie wiem, jak to zrobić. Może jakiś króciutki przykład, link?
Jest sposob ale dziala tylko pod win xp / 2000 bo wymaga przezroczystosci, nalezy powoli zmniejszac wartosc AlphaBlend jednego komponentu [znikajacego] jednoczesnie zwiekszajac drugiego. AlphaBlend moze przyjmowac liczby z zakresu 0-255, gdzie 0 to przezroczysty, wlasciwie niewidzialny smile.gif. Przykladowo taki kod:
var i:integer;
begin
for i:=1 to 255 do
begin
sleep(1);
application.processmessages;
groupbox1.alphablend:=255-i; //coraz bardziej niewidoczny
groupbox2.alphablend:=i; //coraz bardziej widoczny
end;
end;
Przy takim kodzie jednak zamiast visible:=false ustawiasz alphablend:=0;
Dzięki :)
EDIT:
Eee... nie działa mi z tym alphablenedem. "Undecleared identifier: 'alphablend' " Co na to poradzić?
Użytkownik lukmod edytował ten post 27 wrzesień 2005, 15:45
Hmm...
Dość dobrze mi idzie, robię to z ładowaniem obrazów z katalogu. Z tymi przyciskami to zrobiłem to tak: każdy zestaw dla indywidualnego obrazka znajduje się na oddzielnym GroupBoksie, i gdy naciśniesz jeden przycisk to obrazek sie zmienia, znika GroupBox dla poprzedniego obrazka i pojawia się nowy dla obecnego obrazka.
Ma to jednak te same minusy, jak w tej propozycji z visibility i invisibility przy obrazkach... mam kilka tych groupboxów i już mi sie odechciewa :( ciężko nad nimi będzie zapanować, a wychodzi na to, że będzie musiało ich być ok. 50... Jest na to jakiś dość łatwy sposób?
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?
Ja bym to zrobił jeszcze inaczej (aczkolwiek może poprostu rozwinął myśl innych). Otóż wpakował obrazki do 2 zasobów (chociaż można też do jednego): pierwszy lewo <-> prawo a drugi góra <-> doł. Nazwy obrazkom ponadawałbym jako liczby całkowite rosnące w prawo, malejące w lewo i vice versa dla dół góra. Potem kod przycisków byłby niezwykle prosty, gdyż polegałby na zmienianiu wartości zmiennej i wczytaniu obrazku z zasobu o numerze, który przechowuje zmienna.
Dobra, dzięki, tylko jak zrobić z tym zanikaniem (alphablend)...? Help!
Chciałem to napisać w temacie o zamianie domyślnych Buttonów, ale go zamknięto. Tam - z tego, co zrozumiałem - opisano, jak stworzyć menu.
Mi chodzi o to, żebym mógł np. jakiś obrazek ustawić jako przycisk?
Chciałem to napisać w temacie o zamianie domyślnych Buttonów, ale go zamknięto. Tam - z tego, co zrozumiałem - opisano, jak stworzyć menu.
Mi chodzi o to, żebym mógł np. jakiś obrazek ustawić jako przycisk?
Dobra, dzięki, tylko jak zrobić z tym zanikaniem (alphablend)...? Help!
hmm a moze takie zanikanie, ze okienko "groupbox" powoli sie zmniejsza w dol, plynnie, a jak juz sie zmniejszy do 1-2 pikseli to znika i pojawia sie drugi groupbox - i wtedy on zaczyna sie powiekszac w ten sam sposob. Przemysl to, jest to proste a efekt moze byc dobry.
Możesz i to bez żadnego kombinowania. Obrazek ma zdrzenie onclick tak samo jak button. Po prostu dwa razy kliknij na obrazku.
Fakt, mój błąd, dzięki. Parę razy już mi się zdarzyło nacisnąć dwa razy na jakiś obiekt i nie zwróciłem na to uwagi. :P
hmm a moze takie zanikanie, ze okienko "groupbox" powoli sie zmniejsza w dol, plynnie, a jak juz sie zmniejszy do 1-2 pikseli to znika i pojawia sie drugi groupbox - i wtedy on zaczyna sie powiekszac w ten sam sposob. Przemysl to, jest to proste a efekt moze byc dobry
Brzmi ciekawie, ale niezbyt wiem jak to zrobić... Może chociaż napiszesz Einzeinbleth - albo ktoś inny - jakiej komendy do tego użyć, to wtedy już sobie znajdę?
Zalezy od tego jakich rozmiarów są te komponnety i czy np są kwadratami. Do tego pamietaj, że na każdym komputerze taki zabieg będzie sie wykonywał z inna prędkością...
var i: WORD; begin for i := 0 to (komponent1.Height * 2) do begin if komponen1.Visible then begin komponent1.height := komponent1.heght -2; komponent1.width := komponent1.width -2; end; komponent1.Visible := (komponent1.width > 10); Application.ProcessMessages; komponent2.Visible := not komponent1.Visible; if komponent2.Visible then begin komponent2.width := komponent2.width + 2; komponent2.Height := komponent2.height +2; end; end; end;
Użytkownik p1101 edytował ten post 30 wrzesień 2005, 07:30
p1101, niby mi działa z tym kodem, który napisałeś, ale... zrobiłem jako komponent1 i komponent2 dwa group boxy. Kiedy nacisnę na przycisk znajdujący się na GB1, on się ładnie zmniejsza i znika. GB2 jednak zwiększa się i zwiększa, aż w końcu jest z 5 razy większy, niż powienien być. Zmieniałem wszystkie liczby, jakie mogłem, ale to nie podziałało. Jak zrobić, żeby komponent powiększając się zatrzymał się przy dojściu do swojego docelowego rozmiaru? Oto kod mojego próbnego programu:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) gb1: TGroupBox; gb2: TGroupBox; btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; i: WORD; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin for i := 0 to (gb1.Height * 2) do begin if gb1.Visible then begin gb1.height := gb1.height -2; gb1.width := gb1.width -2; end; gb1.Visible := (gb1.width > 10); Application.ProcessMessages; gb2.Visible := not gb1.Visible; if gb2.Visible then begin gb2.Height := gb2.height +2; gb2.Width := gb2.width + 2; end; end; end; procedure TForm1.btn2Click(Sender: TObject); begin for i := 0 to (gb2.Height * 2) do begin if gb2.Visible then begin gb2.height := gb2.height -2; gb2.width := gb2.width -2; end; gb2.Visible := (gb2.width > 10); Application.ProcessMessages; gb1.Visible := not gb2.Visible; if gb1.Visible then begin gb1.Height := gb1.height +2; gb1.Width := gb1.width +2; end; end; end; end.
No tak zapomniałem o tym :) W kodzie, który podałem linijkę:
if komponen1.Visible then
zamień na:
if (komponent1.Visible) and (komponent1.Width > 2) then
a linijkę:
if komponent2.Visible then
zamień na:
if (komponent2.Visible) and (komponent2.Width < 500) then
500 to maksymalna szerokość, wstaw swoją wartość. Możesz także dać Height (wysokość)
Dzięki, już działa :)
Dwa pytanka:
1. Można jakoś zrobić, żeby określić szybkość powiększania się i pomniejszania obiektów?
2. Kiedy pomniejszają się (i powiększają) obiekty, to obraz trochę "skacze" od jednego do drugiego rozmiaru. Jak upłynnić to przejście? Da się wogle, czy to zależne od kompa i nic nie da się zrobić?
Zmień ilość pikseli o jaką dany komponent się zwieksza/zmiejsza... w tym wypadku jedyna możliwośc to z 2 na 1. Wtedy będzie płynniej ale wolniej.
Ewentualnie całość możesz spróbowac dać do Timera i wywalić z pętli.
Hmm... a można zrobić jakoś podobnie tak, żeby powiększała/zmniejszała się Visible obiektu?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Właśnie tworzę program, będący "wirtualną wycieczką" po mojej szkole. Ma to działać tak, że mamy formę, na której jest zdjęcie. Na zdjęciu jest kilka przycisków. W zależności, na który naciśniemy, przechodzimy na zdjęcie np. na lewo lub na prawo od miejsca, które pokazywał poprzedni obrazek - przy czym zawsze możemy się cofnąć do poprzedniego miejsca.
Rozumiem, że muszę stworzyć nową formę do każdego obrazka (bo zmienia się i obrazek, i "adresy" przycisków na nim się znajdujących), tak?
Na razie mój porgram wygląda tak, że po naciśnięciu przycisku otwiera się nowe okno z obrazkiem. Nie wygląda to zbyt efektownie. Przecież użytkownicy mieliby wtedy albo kilkadziesiąt (pod koniec działania programu) otwartych okienek, albo musieliby co chwilę zamykać poprzednie okno.
Proszę o pomoc - jak zrobić, żeby to wszystko było w jednym okienku, po prostu zmieniałyby się widziane obrazki i adresy przycisków?
Na początku chcę napisać, że na Delphi jeszcze się zbytnio nie znam, więc moje pytania mogą być wręcz głupie...
Właśnie tworzę program, będący "wirtualną wycieczką" po mojej szkole. Ma to działać tak, że mamy formę, na której jest zdjęcie. Na zdjęciu jest kilka przycisków. W zależności, na który naciśniemy, przechodzimy na zdjęcie np. na lewo lub na prawo od miejsca, które pokazywał poprzedni obrazek - przy czym zawsze możemy się cofnąć do poprzedniego miejsca.
Rozumiem, że muszę stworzyć nową formę do każdego obrazka (bo zmienia się i obrazek, i "adresy" przycisków na nim się znajdujących), tak?
Na razie mój porgram wygląda tak, że po naciśnięciu przycisku otwiera się nowe okno z obrazkiem. Nie wygląda to zbyt efektownie. Przecież użytkownicy mieliby wtedy albo kilkadziesiąt (pod koniec działania programu) otwartych okienek, albo musieliby co chwilę zamykać poprzednie okno.
Proszę o pomoc - jak zrobić, żeby to wszystko było w jednym okienku, po prostu zmieniałyby się widziane obrazki i adresy przycisków?

ja bym na twoim miejscu stworzyl tablice dwuwymiarowa z adresami obrazkow oraz druga - jednowymiarowa z adresami ostatnio odwiedzonych pol.
I poruszalbym sie po tej tablicy wyswietlajac zdjecie z ostatniego adresu - a dzieki drugiej tablicy nie masz problemu z powrotem :)
@statjacker - pomysl sobie co bedzie przy dwudziestu obrazkach.. a co po stu?
Użytkownik migajek edytował ten post 23 wrzesień 2005, 15:33
@statjacker - pomysl sobie co bedzie przy dwudziestu obrazkach.. a co po stu?

I nawet po dwustu i więcej - a co ma być? Więcej za każdym razem będziesz wyłączał a jeden włączał. To pisze osoba która nie ma doświadczenia w programowaniu w Delphi. Moje rozwiązanie jest proste i skuteczne .

Hmm... dzięki, pobawię się tym. Z tym, że prozpozycje statjacka jako tako rozumiem, a z tymi tablicami... może jakiś link do arta o tym zagadnieniu, coś w tym stylu, migajek? :rolleyes:
EDIT:
http://karton3.cocon...et/Project1.exe - zupełnie robocza wersja, dwa obrazki, propozycja pierwsza (Szybko ściągajcie, bo pewni wkrótce to usuną - to plik .exe). Ciekawie to wygląda, ale jak zrobić, żeby polecenia w buttonach się zmieniły? Chodzi mi po prostu o to:
-------
| ^ |
|< > |
| |
-------
- obrazek, strzałki służą do nawigacji ( np. < - pokazuje co widać, jak spojrzy się w lewo z pierwszej pozycji. Przy naciśnięciu odpowiedniej strzałki zmienia się obrazek i "adresy" przycisków)
Jeśli podacie mi, jak to zrobić z tymi przyciskami, to będzie super. Pozostanie tylko "troszkę" pracy i facet z infy będzie miło zaskoczony :)
Z góry dzięki, fajne to forum :P:P
Użytkownik lukmod edytował ten post 23 wrzesień 2005, 20:59
Delphi nie znam więc wiele ci nie pomoge ale radzę Ci wybrać sposób Migajka. Myślę że było by to dla ciebie wygodniejsze i mniej by program zajął miejsca. Teoretycznie możesz to zrobić tak: Przy starcie programu tworzysz iluś elementową tablicę i wpisujesz do niej nazwy plików. Później tylko do objektu ładujesz plik o odpowiedniej nazwie.
Delphi nie znam więc wiele ci nie pomoge ale radzę Ci wybrać sposób Migajka. Myślę że było by to dla ciebie wygodniejsze i mniej by program zajął miejsca. Teoretycznie możesz to zrobić tak: Przy starcie programu tworzysz iluś elementową tablicę i wpisujesz do niej nazwy plików. Później tylko do objektu ładujesz plik o odpowiedniej nazwie.

Kodu moze być bardzo mało. Wystarczy zrobić procedure globalną w której wszystkie image zostaną wyłączone. A następnie pod nią włączasz tylko jeden image. I Drugi banalnie prosty sposób zrobić jedno image i skopiować wszystkie foto do tego samego katalogu. Następnie wczytywać jeden obrazek do image. Image1.Picture.Bitmap.LoadFromFile('jakis.bmp'); Prosty sposób jest najlepszy
Ja bym akurat ladowal tablice z pliku ale to szczegol :P

ja bym na twoim miejscu stworzyl tablice dwuwymiarowa z adresami obrazkow oraz druga - jednowymiarowa z adresami ostatnio odwiedzonych pol.
...może odrobinkę dokładniej o tym..?
Poza tym, to chyba nie rozwiązałoby problemu z przyciskami. Pytam ponownie, bo nikt mi nie odpowiedział: jak to zrobić, żeby po naciśnięciu przycisku i zmianie obrazka, zmieniły się adresy tegoż i innych przyciksów, ew. powstały też nowe?
To z tym:
imageX.Picture.LoadFromFile('imageX.jpg');
mi ładnie działa, ale byłoby tu przydatne (przynajmniej w wykorzystaniu takim, jak mi to teraz wyszło) na przeglądarkę obrazków, w stylu <przycisk1>parter</przycisk>, <przycisk2>1 piętro</przycisk>, itd...
Jeśli to jakaś różnica, to chcę też dodać, że przyciski mają się czasem znajdować NA obrazku...
Inne pytanie: mogę zrobić przezroczysty obszar w Delphi i ustawić go jako button? Np. ktoś najedzie na jakieś drzwi z obrazka, naciśnie na nie i przejdzie na inny widok, zza tych drzwi itp.?
Kolejne pytanie: co wklepać w kodzie buttona, żeby zmienił się tekst w Label?
w delphi powinny być takie pola które chyba nazywają się Panel przynajmniej w c++ builder były. Wrzć sobie na forme taki panel i ustaw na nim np. 3 przyciski jakie ci tam trzeba. Później kolejny panel i kolejne przyciski. Ustaw wszystkie panele jaki nie widoczne (Panelx->visible = false; <- tak by to było w c++) a później odpowednie panele w odpowiednim czasie ustawiaj jako widoczne.
Hmm...
Dość dobrze mi idzie, robię to z ładowaniem obrazów z katalogu. Z tymi przyciskami to zrobiłem to tak: każdy zestaw dla indywidualnego obrazka znajduje się na oddzielnym GroupBoksie, i gdy naciśniesz jeden przycisk to obrazek sie zmienia, znika GroupBox dla poprzedniego obrazka i pojawia się nowy dla obecnego obrazka.
Ma to jednak te same minusy, jak w tej propozycji z visibility i invisibility przy obrazkach... mam kilka tych groupboxów i już mi sie odechciewa :( ciężko nad nimi będzie zapanować, a wychodzi na to, że będzie musiało ich być ok. 50... Jest na to jakiś dość łatwy sposób?
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?
Prostszy sposob? Jest. Ten ktory podalem :)
//statjacek: a nie mowilem ? :P
Użytkownik migajek edytował ten post 26 wrzesień 2005, 19:35
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?

Bosh ludzie. ale wy nieoptymalne i pamięciożerne rozwiązania tłuczecie :P
a nie lepiej na te obrazki stworzyć listę (zamiast dwóch tablic) dwukierunkową (cykliczną czy nie) a zawartość w group boxach generować dynamicznie? przecież tak niepotrzebnie żżeramy zasoby kompa :/
zawsze można z zasobów ssać :)
bełdzio ma rację. ok jeżeli to jest 15 obrazków. a co będzie jak aplikacja będzie miała bnie 15 a 15000 zdjęc do przechowania? też wrzucicie to do execa?
a tlumaczenia że kolega jest początkujący nie przyjmuję :P bo ci co dłużej tu piszą i mają większe doświadczenie od razu powinni wypleniać błędy jakie by one nie były.
a nie lepiej na te obrazki stworzyć listę (zamiast dwóch tablic) dwukierunkową (cykliczną czy nie) a zawartość w group boxach generować dynamicznie? przecież tak niepotrzebnie żżeramy zasoby kompa :/
No właśnie zastanwiałem się, jak można by automatycznie generować zawartość GroupBoxów. Tylko że za bardzo nie wiem, jak to zrobić. Może jakiś króciutki przykład, link?
Jest sposob ale dziala tylko pod win xp / 2000 bo wymaga przezroczystosci, nalezy powoli zmniejszac wartosc AlphaBlend jednego komponentu [znikajacego] jednoczesnie zwiekszajac drugiego. AlphaBlend moze przyjmowac liczby z zakresu 0-255, gdzie 0 to przezroczysty, wlasciwie niewidzialny smile.gif. Przykladowo taki kod:
var i:integer;
begin
for i:=1 to 255 do
begin
sleep(1);
application.processmessages;
groupbox1.alphablend:=255-i; //coraz bardziej niewidoczny
groupbox2.alphablend:=i; //coraz bardziej widoczny
end;
end;
Przy takim kodzie jednak zamiast visible:=false ustawiasz alphablend:=0;
Dzięki :)
EDIT:
Eee... nie działa mi z tym alphablenedem. "Undecleared identifier: 'alphablend' " Co na to poradzić?
Użytkownik lukmod edytował ten post 27 wrzesień 2005, 15:45
Hmm...
Dość dobrze mi idzie, robię to z ładowaniem obrazów z katalogu. Z tymi przyciskami to zrobiłem to tak: każdy zestaw dla indywidualnego obrazka znajduje się na oddzielnym GroupBoksie, i gdy naciśniesz jeden przycisk to obrazek sie zmienia, znika GroupBox dla poprzedniego obrazka i pojawia się nowy dla obecnego obrazka.
Ma to jednak te same minusy, jak w tej propozycji z visibility i invisibility przy obrazkach... mam kilka tych groupboxów i już mi sie odechciewa :( ciężko nad nimi będzie zapanować, a wychodzi na to, że będzie musiało ich być ok. 50... Jest na to jakiś dość łatwy sposób?
I jeszcze jedno: zrobiłem tak, że groupboxy z przyciskami pojawiają się w tym samym miejscu co poprzednie, które znikły. Wyglada to przejście raczej nieciekawie. Można zrobić jakąś animację, dzięki której powoli niknie poprzedni GrpBox i "przejdzie" w nowy?

Ja bym to zrobił jeszcze inaczej (aczkolwiek może poprostu rozwinął myśl innych). Otóż wpakował obrazki do 2 zasobów (chociaż można też do jednego): pierwszy lewo <-> prawo a drugi góra <-> doł. Nazwy obrazkom ponadawałbym jako liczby całkowite rosnące w prawo, malejące w lewo i vice versa dla dół góra. Potem kod przycisków byłby niezwykle prosty, gdyż polegałby na zmienianiu wartości zmiennej i wczytaniu obrazku z zasobu o numerze, który przechowuje zmienna.
Dobra, dzięki, tylko jak zrobić z tym zanikaniem (alphablend)...? Help!
Chciałem to napisać w temacie o zamianie domyślnych Buttonów, ale go zamknięto. Tam - z tego, co zrozumiałem - opisano, jak stworzyć menu.
Mi chodzi o to, żebym mógł np. jakiś obrazek ustawić jako przycisk?
Chciałem to napisać w temacie o zamianie domyślnych Buttonów, ale go zamknięto. Tam - z tego, co zrozumiałem - opisano, jak stworzyć menu.
Mi chodzi o to, żebym mógł np. jakiś obrazek ustawić jako przycisk?

Dobra, dzięki, tylko jak zrobić z tym zanikaniem (alphablend)...? Help!

hmm a moze takie zanikanie, ze okienko "groupbox" powoli sie zmniejsza w dol, plynnie, a jak juz sie zmniejszy do 1-2 pikseli to znika i pojawia sie drugi groupbox - i wtedy on zaczyna sie powiekszac w ten sam sposob. Przemysl to, jest to proste a efekt moze byc dobry.
Możesz i to bez żadnego kombinowania. Obrazek ma zdrzenie onclick tak samo jak button. Po prostu dwa razy kliknij na obrazku.
Fakt, mój błąd, dzięki. Parę razy już mi się zdarzyło nacisnąć dwa razy na jakiś obiekt i nie zwróciłem na to uwagi. :P
hmm a moze takie zanikanie, ze okienko "groupbox" powoli sie zmniejsza w dol, plynnie, a jak juz sie zmniejszy do 1-2 pikseli to znika i pojawia sie drugi groupbox - i wtedy on zaczyna sie powiekszac w ten sam sposob. Przemysl to, jest to proste a efekt moze byc dobry
Brzmi ciekawie, ale niezbyt wiem jak to zrobić... Może chociaż napiszesz Einzeinbleth - albo ktoś inny - jakiej komendy do tego użyć, to wtedy już sobie znajdę?
Zalezy od tego jakich rozmiarów są te komponnety i czy np są kwadratami. Do tego pamietaj, że na każdym komputerze taki zabieg będzie sie wykonywał z inna prędkością...
var i: WORD; begin for i := 0 to (komponent1.Height * 2) do begin if komponen1.Visible then begin komponent1.height := komponent1.heght -2; komponent1.width := komponent1.width -2; end; komponent1.Visible := (komponent1.width > 10); Application.ProcessMessages; komponent2.Visible := not komponent1.Visible; if komponent2.Visible then begin komponent2.width := komponent2.width + 2; komponent2.Height := komponent2.height +2; end; end; end;
Użytkownik p1101 edytował ten post 30 wrzesień 2005, 07:30
p1101, niby mi działa z tym kodem, który napisałeś, ale... zrobiłem jako komponent1 i komponent2 dwa group boxy. Kiedy nacisnę na przycisk znajdujący się na GB1, on się ładnie zmniejsza i znika. GB2 jednak zwiększa się i zwiększa, aż w końcu jest z 5 razy większy, niż powienien być. Zmieniałem wszystkie liczby, jakie mogłem, ale to nie podziałało. Jak zrobić, żeby komponent powiększając się zatrzymał się przy dojściu do swojego docelowego rozmiaru? Oto kod mojego próbnego programu:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) gb1: TGroupBox; gb2: TGroupBox; btn1: TButton; btn2: TButton; procedure btn1Click(Sender: TObject); procedure btn2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; i: WORD; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject); begin for i := 0 to (gb1.Height * 2) do begin if gb1.Visible then begin gb1.height := gb1.height -2; gb1.width := gb1.width -2; end; gb1.Visible := (gb1.width > 10); Application.ProcessMessages; gb2.Visible := not gb1.Visible; if gb2.Visible then begin gb2.Height := gb2.height +2; gb2.Width := gb2.width + 2; end; end; end; procedure TForm1.btn2Click(Sender: TObject); begin for i := 0 to (gb2.Height * 2) do begin if gb2.Visible then begin gb2.height := gb2.height -2; gb2.width := gb2.width -2; end; gb2.Visible := (gb2.width > 10); Application.ProcessMessages; gb1.Visible := not gb2.Visible; if gb1.Visible then begin gb1.Height := gb1.height +2; gb1.Width := gb1.width +2; end; end; end; end.
No tak zapomniałem o tym :) W kodzie, który podałem linijkę:
if komponen1.Visible then
zamień na:
if (komponent1.Visible) and (komponent1.Width > 2) then
a linijkę:
if komponent2.Visible then
zamień na:
if (komponent2.Visible) and (komponent2.Width < 500) then
500 to maksymalna szerokość, wstaw swoją wartość. Możesz także dać Height (wysokość)
Dzięki, już działa :)
Dwa pytanka:
1. Można jakoś zrobić, żeby określić szybkość powiększania się i pomniejszania obiektów?
2. Kiedy pomniejszają się (i powiększają) obiekty, to obraz trochę "skacze" od jednego do drugiego rozmiaru. Jak upłynnić to przejście? Da się wogle, czy to zależne od kompa i nic nie da się zrobić?
Zmień ilość pikseli o jaką dany komponent się zwieksza/zmiejsza... w tym wypadku jedyna możliwośc to z 2 na 1. Wtedy będzie płynniej ale wolniej.
Ewentualnie całość możesz spróbowac dać do Timera i wywalić z pętli.
Hmm... a można zrobić jakoś podobnie tak, żeby powiększała/zmniejszała się Visible obiektu?