MDIChild form saklama
hicker28.06.2005 - 12:15:13
dxGridHook ile mdichild formların kaydedilememesinin sebebi nedir acaba?
if TForm(AComponent).formStyle <> fsMDIChild then
SaveForm;

birinci satırdaki şartı kaldırınca mdichild formlar da kaydediliyor. ini dosyadan kontrol ettiğimde de bir sorun yok, kayıt doğru yapılmış. ancak form açılırken yükleme esnasında tüm değerler default atanan değerleriyle okunuyor.
AColumn.Visible := ReadBool(APathCol, 'Visible', AColumn.Visible);

APathCol ile verilen bölüm ini dosyada mevcut, 'Visible' başlığına karşılık değeri de 0 ancak okunan değer 1 yani AColumn.Visible ile verilen default değeri dönüyor. bunun sebebi ne olabilir ve üstesinden gelmenin bir yolu var mıdır?
 
hicker29.06.2005 - 09:47:01
deneme yanılma yoluyla bir çözüm buldum ama içime sindiğini söyleyemem. formlar açılıp kapanırken geçen windows mesajlarını kontrol edince tasarım aşamasında form stili fsMDIChild olan, ancak çalışma esnasında fsNormal olarak değiştirdiğim formların kapanışı esnasında WM_Destroy yerine WM_Activate mesajının geldiğini farkettim. MSDN'deki açıklamaya göre ve WM_Activate mesajının da isminden anlaşılabileceği gibi bu mesaj form aktif olduğunda ve aktivasyonu geçtiğinde gönderiliyor. ama programımdaki mesaj akışında bunun böyle olmadığını, WM_Activate mesajının sadece yukarıda bahsettiğim şartlara uyan formlar kapanırken geldiğini farkettim. infoCustomizeHook içerisinde aşağıdaki değişikliği yapınca sorunum çözüldü. Umarım çözüm doğrudur ve birilerinin işine yarar...
function infodxWndHookProc(Code: Integer; wParam: WParam; lParam: LParam): LRESULT stdcall;
var
AComponent: TComponent;
begin
try
if infoHook.Enabled then
with PCWPStruct(lParam)^ do
begin
AComponent := FindControl(HWnd);
if Message = WM_SHOWWINDOW then
if AComponent is TCustomForm then
if wParam = WSF_VISIBLE then
infoHook.LoadControlSettings(AComponent)
else
else
else if (Message = WM_DESTROY)or(Message = WM_ACTIVATE) then
if (AComponent is TCustomForm) then
infoHook.SaveControlSettings(AComponent)
...
 
NOT : Bu sayfa google'un siteyi indekslemesi içindir. www.delphiturkiye.com/forum/ adresini kullanınız!
1998-2006 www.delphiturkiye.com