| hicker | 28.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? | |
| hicker | 29.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) ... | |