Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];

Вниз

Form2.Parent:= Form1   Найти похожие ветки 

 
A.L.   (2002-02-14 14:05) [0]

У обоих форм FormStyle:= fsNormal
при этом заголовок Form2 всегда остается серым
как исправить?


 
i8085   (2002-02-15 03:40) [1]

Так ить активной может быть только одна форма...


 
A.L.   (2002-02-15 05:48) [2]

да, это до меня уже дошло...
но как же мне сделать следующее:
В приложении есть несколько рабочих областей. В каждой области свое меню, свои тулбары, свои дочерние окна.
Я делаю так: на главной форме TabSet и несколько окон с Parent:= MainForm, в которых уже есть свои меню, тулбары ...
У окон BorderStyle:= bsNone, поэтому в общем наплевать, что окно не активизируется, но при этом и Child окна нормально не работают (Access violation сплошной) :(


 
Loxly   (2002-02-15 06:41) [3]

A для чего устанавливать свойство Parent у формы?
Я никогда так не делал и не слышал о таком.


 
A.L.   (2002-02-15 09:01) [4]

Loxly
После Form2.Parent:= Form1
форма Form2 располагается в пределах формы Form1
(почти как дочерняя)


 
Юрий Зотов (M)   (2002-02-15 09:30) [5]

> но при этом и Child окна нормально не работают (Access violation сплошной)

Возможно, причина вовсе не в том, что Вы предполагаете. Приведите фрагмент кода, дающий Access violation, тогда, вероятно, можно будет сказать конкретнее.


 
A.L.   (2002-02-15 10:35) [6]

Юрий Зотов
В проекте открывается несколько форм:

Application.CreateForm(TfmMain, fmMain); //Главная форма
Application.CreateForm(TfmTab, fmTab1);
fmTab1.Parent:= fmMain;
...
Application.CreateForm(TfmTab, fmTabN);
fmTabN.Parent:= fmMain;


у форм fmTab1..fmTabN:
FormStyle:= fsMDIForm;

В этих окнах пытаюсь создавать MDIChild окна,

fmChild:= TTTabChildForm.Create(Application, fmTabForm);

наследники класса:

unit uChForm;

interface

uses
Windows, Classes, Controls, Forms, Messages, Consts;

type
TTabChildForm = class(TForm)
private
{ Private declarations }
FParentForm: TForm;
protected
FClientHandle: HWND;
procedure CreateWindowHandle(const Params: TCreateParams); override;
procedure DestroyWindowHandle; override;
public
{ Public declarations }
constructor Create(AOwner: TComponent; AParent: TForm); reintroduce; overload;
end;

implementation

procedure TTabChildForm.CreateWindowHandle(const Params: TCreateParams);
var
CreateStruct: TMDICreateStruct;
begin
if (FormStyle = fsMDIChild) and not (csDesigning in ComponentState) then
begin
if (FParentForm = nil) or (FParentForm.ClientHandle = 0) then
raise EInvalidOperation.Create(SNoMDIForm);
with CreateStruct do
begin
szClass:= Params.WinClassName;
szTitle:= Params.Caption;
hOwner:= HInstance;
X:= Params.X;
Y:= Params.Y;
cX:= Params.Width;
cY:= Params.Height;
style:= Params.Style;
lParam:= Longint(Params.Param);
end;
WindowHandle:= SendMessage(FParentForm.ClientHandle,
WM_MDICREATE, 0, Longint(@CreateStruct));
Include(FFormState, fsCreatedMDIChild);
end else
begin
inherited CreateWindowHandle(Params);
Exclude(FFormState, fsCreatedMDIChild);
end;
end;

procedure TTabChildForm.DestroyWindowHandle;
begin
if fsCreatedMDIChild in FFormState then
SendMessage(FParentForm.ClientHandle, WM_MDIDESTROY, Handle, 0)
else
inherited DestroyWindowHandle;
FClientHandle:= 0;
end;

constructor TTabChildForm.Create(AOwner: TComponent; AParent: TForm);
begin
FParentForm:= AParent;
inherited Create(AOwner);
end;

end.

создаваться то они создаются, но, например, при максимизации дочернего окна и еще где не поподя лезет "Access violation"


 
-=CrazyFish=-   (2002-02-15 11:30) [7]

У формы, содержащей дочерние MDI-окна, должено быть установлено свойство
FormsStyle:=fsMDIForm. Такая форма должна быть в приложении одна и являться главной. При попытке использовать в одном приложении несколько главных MDI-форм ошибок не избежать.
Удачи.


 
A.L.   (2002-02-16 22:24) [8]

-=CrazyFish=-
Это не так


 
A.L.   (2002-02-18 12:02) [9]

а в ответ тишина...
:(


 
Юрий Зотов   (2002-02-18 12:44) [10]

Сдается мне, что -=CrazyFish=- все же прав. Но попробуйте следующее - в классе дочерних окон напишите обработчик WM_SYSCOMMAND c SC_MAXIMIZE, поставьте в нем BreakPoint, пройдите отладчиком и выясните ТОЧНО, где возникает Access Violation.


 
A.L.   (2002-02-18 16:54) [11]

Все прекрасно работает, если не пытаться засунуть MDIForm формы в пределы главного окна программы (т.е. убрать строки типа fmTab1.Parent:= fmMain)
MDIChild окна создаются в разных MDIForm окнах, закрываются и вообщем все пучком.
Но мне то надо не совсем так.


 
Юрий Зотов   (2002-02-18 17:03) [12]

Вынужден повториться - выясните ТОЧНО, где возникает Access Violation. Иначе разговор беспредметен.


 
A.L.   (2002-02-19 11:39) [13]

Access Violation где-то в недрах user32.dll не могу я его отследить.
Видимо такой подход не прокатит.
Но как же мне реализовать задуманный интерфейс:
В приложении есть несколько рабочих областей. В каждой области свое меню, свои тулбары, свои дочерние окна. Внизу TabSet, который позволяет переключаться между областями.
Help!


 
A.L.   (2002-02-20 09:27) [14]

up


 
A.L.   (2002-02-21 08:34) [15]

help!


 
panov   (2002-02-21 09:00) [16]

Если так хочется сделать с MDI, то можно, как вариант, попробовать управлять из TabSet разными процессами, в каждом из которых открывается своя рабочая область...


 
A.L.   (2002-02-21 09:45) [17]

panov
А что значит открыть в процессе свою рабочую область?
Каким образом? Можно чуть подробнее идею?


 
panov   (2002-02-21 10:55) [18]

У тебя есть основная программа с TabSet. При необходимости создать дополнительную рабочую область(как у тебя звучит), запускаешь программу, где у тебя используется технология MDI,
т.е. запускаешь столько экземпляров своего приложения, сколько тебе нужно и работаешь с ними, пересылая сообщения между приложениями.


 
A.L.   (2002-02-21 11:23) [19]

panov
Но при этом получится, что каждая рабочая область в отдельном окне.
Так я могу и в одной проге сделать.
Мне охота в чтоб области находились в едином окне, а внизу окна TabSet (типа как в Excel-е переключение между листами)


 
A.L.   (2002-02-22 08:12) [20]

up


 
A.L.   (2002-02-26 08:59) [21]

что, идей нет?


 
handra   (2002-02-26 10:05) [22]

constructor TTabChildForm.Create(AOwner: TComponent; AParent: TForm);
begin
FParentForm:= AParent;
inherited Create(AOwner);
end;

А почему бы две строчки между begin и end не поменять местами?



 
A.L.   (2002-02-26 10:14) [23]

handra
Тогда получим исключение.
см. строку
if (FParentForm = nil) or (FParentForm.ClientHandle = 0) then
модуля uChForm


 
A.L.   (2002-02-28 10:43) [24]

up



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.03.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.005 c
3-42916
ser_ker
2002-02-14 10:51
2002.03.14
Как заставить программу работать через ODBC без BDE ?


3-42982
Люк
2002-02-15 11:45
2002.03.14
Работа ADO под WindowsXP


14-43153
Desdechado
2002-01-29 12:43
2002.03.14
не казенный лоб у нас


14-43139
vajo
2002-01-25 16:00
2002.03.14
WinXP


6-43125
Delphimun
2001-12-28 16:17
2002.03.14
Как узнать адреса в локальной сети, куда заходил пользователь в винде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский