Czy znikanie pojawianie się komponentu na formie ma wpływ na odświeżanie innych komponentów formy?

0

Witam ponownie.

Próbuję odtworzyć sytuację w minimalnych warunkach - jak tylko się uda podeślę załącznik.

Jest taka sytuacja: jest forma główna: **Panel **z buttonami, **StringGrid **z kilkoma wierszami danych, **Image **z wczytaną na stałe grafiką - opisuję dokładnie bo jeszcze nie dotarłem co jest przyczyną.
Żeby sprawdzić co faktycznie jest przyczyną umieściłem na panelu dwa nowe Buttony: Button1 i Button2.

  1. Zaznaczam myszką w StringGrid np Row=3;

  2. Klikam Button1 pod którym jest kod:

procedure TfrmG.Button1Click(Sender: TObject);
begin
  Button2.Visible:= False;
end;
  1. W tym momencie znika nieoprogramowany **Button2 ** i jakimś "cudem" zaznaczenie na **StringGrid **zmienia się na Row=1 czyli pierwszy biały wiersz.

  2. Muszę się z tym jakoś uporać bo zaznaczony wiersz wskazuje pozycję na liście rekordów do obróbki? W momencie kiedy wyświetlam lub chowam np **Memo ** z informacją lub cokolwiek innego.. zmienia się zaznaczenie zawsze na pierwsza wolną, zmieniają się dane i nic nie można zrobić.

  3. A sytuacji nie umiem odtworzyć na czystej formie bo położyłem komponenty te które są na omawianej formie i chyba nie wszystko uwzględniłem bo na testowej formie **StringGrid ** się nie odświeża przy znikaniu Buttona.

1

Znikanie przycisku nie ma nic wspólnego ze zmianą zaznaczenia w innym komponencie - to można śmiało stwierdzić, nawet bez testów; Nic nie dzieje się bez przyczyny - skoro zaznaczenie zmienia się, to jakieś instrukcje to powodują; Nie ma znaczenia czy te instrukcje są Twoje, czy w kodzie komponentu (czyli bugi), w każdym razie samo się nic nie dzieje;

Z drugiej strony, jeśli stworzyłeś sobie gołą aplikację i nie potrafisz odwzorować tego zachowania to znaczy, że na pewno gdzieś w kodzie właściwej aplikacji przestawiane jest zaznaczenie w jakiś sposób (może zdarzenia myszy, może odświeżanie, może coś innego) - bez kodu nic więcej nie można napisać;

Spróbuj zwęszyć sprawę debugerem - on zapewni Ci większe szanse na znalezienie buga.

0

Znalazła się sprawczyni złego ...

procedure TfrmG.FormCanResize(Sender: TObject; var NewWidth, NewHeight: Integer;
  var Resize: Boolean);
begin //
  if NewHeight<500 then NewHeight:=500;
  if NewWidth <500 then NewWidth :=500;
               // i funkcje które przy zmianie wielkości dopasowują szerokości kolumn
  LsUOso_StrGrid_ShowWidok(....);
  LsUOso_StrGrid_ShowDane(....);
end;

Nie sądziłem że znikanie nieoprogramowanego Buttona ma coś wspólnego ze zdarzeniem **FormCanResize **- a procedura jest potrzebna. Mam pytanie jak na czas operacji programowo wyłączyć wykrywanie **FormCanResize **?
Bo jeśli nie ma sposobu to pozostanie wstawienie zmiennej i warunku.

2

Ustaw Constraints.MinHeight formularza i z MinWidth to samo, ale problem jest raczej z tym LsUOso_StrGrid_ShowWidok(....); a jak to działa nie wiadomo.

//Przypuszczam po nazwie, że wypełniasz podczas zmiany rozmiaru formularza grid od nowa a focus po wypełnieniu jest na 1 rekordzie.

0

LsUOso_StrGrid_ShowWidok(....) działa tak, że jak jest zmiana wielkości to odświeża widok **StringGrida ** ale faktycznie procedury były testowane przy pierwszym pokazaniu danych gdy forma się pokazywała - mimo że nie jest to ShowForm; Domyślnie wskazują właśnie pierwszy wiersz a nie zapamiętany/zaznaczony - czyli pierwszy bug.

Wykorzystam to co podał @szopenfx

procedure TForm.FormCreate(Sender: TObject);
begin
  Constraints.MinWidth := 400;
  Constraints.MinHeight := 400;
end;

a oprócz tego poprawię odświeżanie w LsUOso_StrGrid_ShowWidok(....), można też dodatkowo wsiąść procedurę w warunek i używać gdy rozmiar się faktycznie zmienił - drugi bug.

To temat zakończony powodzeniem. Dobrej nocy

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