Położenie jednej formy względem drugiej

Odpowiedz Nowy wątek
2011-07-31 11:35
Starmax
0

Witam,

Mam problem, a szczegółowo, to tak: mam 2 formy. Pierwsza jest widoczna cały czas, zaś druga po kliknięciu buttona powinna pojawić się w górnym prawym rogu. Cały czas próbuję to zrobić, ale teraz utknąłem. Nie wiem czemu z kodu poniżej wyskakuje błąd.

procedure TForm5.FormCreate(Sender: TObject);
begin
Form5.Left:=Form1.Left+(Form1.Width-Form5.Width);
Form5.Top:=Form1.Top+(Form1.Height-Form5.Height);
 
end;

Proszę o pomoc i pozdrawiam,
Starmax

Jaki błąd? - pelsta 2011-07-31 12:12

Pozostało 580 znaków

2011-07-31 12:09
0

W górnym prawym rogu pierwszej formy czy rogu ekranu? Napisałeś w tytule "względem drugiej". Jak chcesz w prawym górnym rogu względem drugiej formy to:

Form2.Left := Form1.Left + Form1.Width;
Form2.Top := Form1.Top;

A względem ekranu w jego prawym górnym rogu:

Form2.Left := // <klops> Dawno nie pisałem nic w Delphi i nie pamiętam jak się odczytuje właściwości ekranu ;/
// W każdym razie poszukaj w necie jak odczytać długość i wysokość ekranu, a szablon będzie taki:
Form2.Left := dl_ekranu - Form2.Width;
Form2.Top := 0;

Powinno działać.

A jaki tam masz błąd?? <treść>


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 1x, ostatnio: xeo545x39, 2011-07-31 12:10
Screen.Width oraz Screen.Height :) - Patryk27 2011-07-31 12:12
Miałem napisać, ale co będę źle komuś mówił ;p - xeo545x39 2011-07-31 12:59

Pozostało 580 znaków

2011-07-31 12:14
0
Form5.Left:=Form1.Left+(Form1.Width-Form5.Width);
Form5.Top:=Form1.Top+(Form1.Height-Form5.Height);

Podczas tworzenia formy nie ma ona jeszcze przypisanych wymiarów (chyba), lecz nie powinno to wywoływać błędu.


Jak najbardziej ma. Możne je wtedy dokładnie dopasować do swoich potrzeb. - pelsta 2011-07-31 12:18

Pozostało 580 znaków

2011-07-31 12:19
Opi
0

Odwołanie jest do formy, która jeszcze nie istnieje.
Takie rzeczy wykonuje się w OnShow/OnActivate formy głównej.

Pozostało 580 znaków

2011-07-31 12:29
0

U mnie ten kod

Form2.Left:=Form1.Left+(Form1.Width-Form2.Width);
Form2.Top:=Form1.Top+(Form1.Height-Form2.Height);

Działa bezproblemowo.
Kod podpięty pod Form2.Create, a pod Form1.Button1.Click jest wyświetlenie tej formy.
Brak błędów, choć wg.mnie pozycja okna powinna być ustawiana w Form1.Button1.Click przed wyświetleniem Form2 (czy tam Form5).


edytowany 3x, ostatnio: Patryk27, 2011-07-31 12:31

Pozostało 580 znaków

2011-07-31 12:52
0

Hmmm na Delphi się wprawdzie nie wyznaję,ale czy tutaj nie ma czasem możliwości stworzenia relacji child-parent pomiędzy formami?Wówczas z automatu pozycja childa będzie dostosowana do pozycji parenta


"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]

Pozostało 580 znaków

2011-07-31 12:59
0
Starmax napisał(a)

Mam problem, a szczegółowo, to tak: mam 2 formy. Pierwsza jest widoczna cały czas, zaś druga po kliknięciu buttona powinna pojawić się w górnym prawym rogu.

Krótko i na temat:

procedure TForm1.Button1Click(Sender: TObject);
begin
  Form5.Left:= Form1.ClientOrigin.X + Form1.ClientWidth - Form5.Width;
  Form5.Top:= Form1.ClientOrigin.Y;
  Form5.Show;
end;

Pozostało 580 znaków

2011-07-31 16:08
Starmax
0

Może źle napisałem. Chodzi mi o położenie Jednej formy wzg. drugiej. Druga forma po kliknięciu buttona powinna pojawić się w górnym prawym rogu formy pierwszej.

Zaś treść błędu brzmi:

Project Project1.exe raised exception class EAcessViolation with message 'Access violation at adress 00470042 in module 'Project1.exe'. Read of adress 00000048'. Process stopped. Use Step or Run to Continue.

Pozdrawiam
Starmax

Pozostało 580 znaków

2011-07-31 16:26
0

O jakie ustawienie w rogu Ci chodzi? Przedstawiłem 2 moje możliwości, o ktorą ci chodzi? (może jeszcze inną??):
Forma 2. względem I - środek formy w prawym górnym rogu Formy 1.:
user image
Forma 2. względem I - lewy dolny róg Formy 2. w prawym górnym Formy 1.:
user image

Kod dla możliwości I.:

procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Left := Form1.Left + Form1.Width - (Form2.Width / 2);
Form2.Top := Form1.Top + (Form2.Height / 2);
Form2.ShowModal;
end;

Kod dla możliwości II podałem kilka postów wyżej.


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>
edytowany 2x, ostatnio: xeo545x39, 2011-07-31 16:33

Pozostało 580 znaków

2011-07-31 16:39
Starmax
0

Dokładnie chodzi mi o możliwość II, ale i przy niej pojawia mi się błąd "Project Project1.exe raised exception class EAcessViolation with message 'Access violation at adress 00470042 in module 'Project1.exe'. Read of adress 00000048'. Process stopped. Use Step or Run to Continue."

Pozostało 580 znaków

2011-07-31 16:39
0

A gdzie ten kod wpisujesz? W evencie Buttona?


<error>There was an error during loading user signature. Please try to reboot the Universe and check again.</error>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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