@dani17 - nie użwaj słów kluczowych do nazywania obiektów; PanelWyboru
jest tworzony, ale nie jest zwalniany, więc masz wyciek pamięci; Kolejna rzecz:
Kopiuj
PanelWyboru := TForm.Create(Application);
with PanelWyboru do
begin
Show();
Width := Program.Width;
Height := Program.Height;
Left := Program.Left;
Top := Program.Top;
end;
Ktoś nie zna metody SetBounds i właściwości BoundsRect; W Twoim przypadku wystarczy tyle:
Kopiuj
PanelWyboru := TForm.Create(Application);
PanelWyboru.BoundsRect := Program.BoundsRect;
PanelWyboru.Show();
Przy czym najpierw ustala się rozmiar komponentu lub okna, a dopiero potem pokazuje się go na ekranie; W przeciwnym razie może migać;
Następny kod:
Kopiuj
with ListaWyboru do
begin
Parent := PanelWyboru;
Height := Parent.Height - 50;
Left := 0;
Top := 0;
Visible := True;
end;
Również można go napisać inaczej:
Kopiuj
ListaWyboru.Parent := PanelWyboru;
ListaWyboru.SetBounds(0, 0, ListaWyboru.Width, Parent.Height - 50);
ListaWyboru.Show();
Użycie metody SetBounds jest zalecane, bo powoduje tylko jedną akcję zmiany rozmiaru; Ustawianie każdego rozmiaru/pozycji osobno, powoduje wielokrotne wywołanie wewnętrznych metod zmieniających rozmiar i położenie, ustawiających wymiary i położenie komponentów zagnieżdżonych oraz przemalowujących płótno; W rezultacie kod wykonuje się 4x dłużej; Poza tym, do pokazywania i ukrywania komponentów/okien używaj albo pary metod Show
i Hide
, albo właściwości Visible
; Po to, aby było jednolicie;
Przy czym z właściwości Visible
korzystaj tylko w przypadku, gdy to czy komponent/formularz pokazać czy ukryć, nie da się określić na poziomie pisania kodu (np. gdy widoczność elementu określa wartość jakiejś zmiennej);
Kopiuj
AssignFile(Plik, 'config/cpeople.txt');
Reset(Plik);
try
repeat
ReadLn(Plik);
ReadLn(Plik, Napis);
Imie := StringReplace(Napis, 'First Name = ', '', []);
ReadLn(Plik, Napis);
Nazwisko := StringReplace(Napis, 'Last Name = ', '', []);
ListaWyboru.Items.Add(Imie + ' ' + Nazwisko);
for J := 1 to 16 do
ReadLn(Plik);
until EOF(Plik);
finally
CloseFile(Plik);
end;
Co to za pieroństwo? Użyj jakiegoś API do plików konfiguracyjnych, zamiast ręcznie je rzeźbić... Z tego co widzę po kodzie, spokojnie wystarczą Ci pliki INI;
A jeśli o samo okno chodzi to nie rozumiem czego nie rozumiesz; Okno otwarte za pomocą metody ShowModal po prostu zatrzyma działanie bieżącego kodu, aż do momentu zamknięcia takiego okienka (w dowolny sposób); Zamknięte okienko nadal istnieje w pamięci, więc dalszy kod (ten chwilowo zatrzymany) może odczytać z niego dane; W ten sposób robi się własne okna dialogowe, tyle że całość opakowuje się w klasę sterującą i wygodnie zwracającą dane z okienka (kopiuje sobie dane z formularza do swoich pól, zanim zwolni obiekt okna z pamięci).