그리드 파넬은 첫 번째 크기 조정시 조정되지 않습니다
-
21-08-2019 - |
문제
나는 그것을 시도하는 데 오랜 시간을 보내더라도 해결할 수없는 문제가 있습니다.
나는 보통 그리드 파넬을 사용하여 형태의 컨트롤을 정렬합니다. 그러나 성가신 버그가 있습니다. 그리드 파넬 정렬 모드가 Alclient이고 부모 창을 최대화하면 그리드 파넬은 해당 창의 새 크기로 조정되지만 그리드에 놓인 컨트롤은 그렇지 않습니다. 그들은 창을 크기를 조정하기 전과 같은 위치에 머물러 있습니다. 첫 번째 창의 최대화에서만 발생합니다. 창의 먼저 수동으로 크기를 조정하면 모든 것이 정상입니다. 두 번째 크기 조정 이벤트 (??) 후 그리드가 자식 제어를 조정한다고 생각합니다.
이 버그와 관련하여 그리드 파넬을 올바르게 작동 시키게하려면 어떻게해야합니까? 메시지를 보내기에 충분할 수 있습니다 (그러나 어떤 메시지?) 모르겠습니다. 나는 재조정, 새로 고침 등을 사용하려고했지만 도움이되지 않았습니다.
미리 도와 주셔서 감사합니다.
마리우스.
해결책
아, 나도 비슷한 문제가있었습니다. VCL의 크기 조정 문제와 관련이있을 수 있습니다. 시도하고 싶을 수도 있습니다 Andreas Hausladen의 수정. 대부분의 경우에 저에게 효과가있는 것 같습니다.
다른 팁
나는 하나의 트릭을 찾았다.
안에 OnResize
그리드 파넬의 부모의 사건, 그리드 파넬의 너비를 1 픽셀로 변경하십시오.
그런 다음 Gridpanel은 크기가 변경된 다음 Gridpanel에서 하위 제어를 재 배열합니다.
샘플은 아래입니다 ..
procedure TForm1.FormResize(Sender: TObject);
begin
GridPanel1.Width := GridPanel1.Width - 1; // subtract 1
GridPanel1.Width := GridPanel1.Width + 1; // recover width by adding 1
end;
너비를 변경 / 컨트롤을 무효화하는 것은 효과가 없습니다 (최근 버전의 Rad Studio에서 변경된 것은 무엇입니까?).
어쨌든 해당 라인을 따라 비슷하고 간단한 해결 방법은 다음과 같습니다.
procedure TForm1.FormResize(Sender: TObject);
begin
GridPanel1.ControlCollection.BeginUpdate;
GridPanel1.ControlCollection.EndUpdate;
end;
여러 프로젝트 에서도이 오류가있었습니다. 나는 이것을 어떻게 해결했는지 잘 모르겠습니다 (이전 고용주를위한 프로젝트에 있었고 더 이상이 소스 코드에 액세스 할 수 없습니다). 나는 GridPanel이 배치 된 부모 프레임이나 형태를 TE Redraw / Refresh를 가지고 있다고 생각합니다.
소유자의 크기를 조정하십시오. 나는 그것을 테스트하지 않았다. 나는 그것이 일하기를 바랍니다.