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

Вниз

Вопрос о MDI окнах   Найти похожие ветки 

 
dimonf   (2001-12-23 13:29) [0]

Народ, распахиваю два окна. В каждом окне на Canvos рисую разную информацию. Но после того как я возражаюсь к первому окну MDI у меня почемуто выводится Canvas второго окна MDI.

В чем проблема? Где я опять напортачил? :)))


 
cdaDmitriy   (2001-12-23 13:37) [1]

Source Please


 
dimonf   (2001-12-24 08:53) [2]

Нет мыслей?


 
cdaDmitriy   (2001-12-24 09:26) [3]

какие мысли если не известно что ты делаешь ....



 
vl_chel   (2001-12-24 10:26) [4]

как ты рисуешь?
проверь обработчик OnPaint проблема именно там
наверное забыл об полиморфизме


 
Clever man   (2001-12-24 10:35) [5]

А может работаешь с разными указателями на один и тот-же объект Canvas?


 
dimonf   (2001-12-24 11:07) [6]

Народ, мне нужно разобраться как критить MDI окно. Указывать индификатор на окно "жоско".
Типа: Child:=TMDIChild.CreateMDI(self,Idx), где Idx - индекс окна.
Диапозон идексов от 1 до 3.
У меня получилось:
type
TMDIChild=Class;

TPreview = class(TPanel)
private
property Canvas;
protected
MyMDI:TMDIChild;
procedure Paint; override;
procedure Draw(Value:Integer);
public
constructor Create(AOwner:TComponent); override;
function ConvData(Str: String; Index: Integer): String;
end;

TMDIChild = class(TForm)
fsChild: TfsManager;
TabSet1: TTabSet;
ScrollBox1: TScrollBox;
Panel1: TPanel;
constructor CreateMDI(Sender: TObject; Idx:integer);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
protected
Idx:integer;
public
MyPrev : TPreview;
end;

constructor TMDIChild.CreateMDI(Sender: TObject; AIdx:integer);
begin
Create(Sender);
Idx:=AIdx;
end;

constructor TPreview.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
MyMDI:=AOwner;
Parent := AOwner as TWinControl;
BevelInner := bvNone;
BevelOuter := bvNone;
Color := clWhite;
BorderStyle := bsNone;
end;

procedure TPreview.Paint;
begin
Draw(MyMDI.Idx);
end;

Но почемуто данный кон нех...на не работает :(((
Может я чего не понемаю. Или ручки кривые???


 
cdaDmitriy   (2001-12-24 11:30) [7]

-- dimonf
1. Народ, мне нужно разобраться как критить MDI окно ---???

2. Draw(MyMDI.Idx); -- ???

3.
constructor TMDIChild.CreateMDI(Sender: TObject; AIdx:integer);
begin
Create(Sender); // -- ??? Inherited Create(AOwner);
Idx:=AIdx;
end;

4.
MyPrev : TPreview; // ---??? Create Where

5. TPreview - Where он находится Left .....




 
cdaDmitriy   (2001-12-24 11:33) [8]

constructor TMDIChild.CreateMDI(Sender: TObject; AIdx:integer);
begin
Create(Sender); // -- ??? MyPrev:=TPreview.Create(AOwner);
Idx:=AIdx;
end;


 
dimonf   (2001-12-24 11:58) [9]

MyPrev:=TPreview.Create(AOwner); - такая строчка почемуто не прокатывает.
ругаеться типа: Undeclared indentifier "AOwner"

А по поводу строчки TPreview - Where он находится Left .....
Я вообще не понял :(





 
cdaDmitriy   (2001-12-24 12:40) [10]

извини MyPrev:=TPreview.Create(Sender); // -- ??

constructor TMDIChild.CreateMDI(Sender: TObject; AIdx:integer);
begin
MyPrev:=TPreview.Create(Sender);
With MyPrev Do begin
left:=...; Top:=...;
Height:=...; Width:=...;
// и другие параметры
End;
Idx:=AIdx;
end;

и где реализация

TPreview.Draw(MyMDI.Idx);


 
dimonf   (2001-12-24 13:28) [11]

Это MainForm:
-------------------------------------------------------------------
...
private
procedure CreateMDIChild(const Name: string; Idx:Integer);
...
procedure TMainForm.CreateMDIChild(const Name: string; Idx:Integer);
var
Child: TMDIChild;
begin
Child:=TMDIChild.CreateMDI(Self, Idx);
// Child.Caption := Name;
// Child.Show;
// Child := TMDIChild.Create(Application);
// Child.Caption := Name;
end;

Вызываю :
CreateMDIChild("Текущие значения",1);

-------------------------------------------------------------------

Это Childwin:

-------------------------------------------------------------------
type
TMyPozice = (pzLeft, pzRight, pzCenter);
TMyRect = record
Left, Top, Right, Bottom: Integer;
end;

type
TMDIChild=Class;

TPreview = class(TPanel)
private
property Canvas;
protected
MyMDI:TMDIChild;
procedure Paint; override;
procedure Draw(Value:Integer);
public
constructor Create(AOwner:TComponent); override;
function ConvData(Str: String; Index: Integer): String;
end;

TMDIChild = class(TForm)
fsChild: TfsManager;
TabSet1: TTabSet;
ScrollBox1: TScrollBox;
Panel1: TPanel;
constructor CreateMDI(Sender: TObject; AIdx:integer);
procedure FormCreate(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormDestroy(Sender: TObject);
private
protected
Idx:integer;
public
MyPrev : TPreview;
end;
...
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
Var iChild:integer;
MainForm:TForm;
begin
MainForm:=TForm(TForm(Sender).Owner);
for iChild:=0 to MainForm.MDIChildCount-1
do MainForm.MDIChildren[iChild].WindowState:=wsNormal;
// MyPrev.Free;
Action := caFree;
end;

procedure TMDIChild.FormCreate(Sender: TObject);
begin
SetWindowLong(ClientHandle, GWL_EXSTYLE,
GetWindowLong(ClientHandle,
GWL_EXSTYLE) or WS_EX_CLIENTEDGE);
SetWindowPos(ClientHandle, 0, 0, 0, 0, 0,
swp_DrawFrame or swp_NoMove or swp_NoSize
or swp_NoZOrder);
end;

constructor TPreview.Create(AOwner: TComponent);
begin
Inherited Create(AOwner);
MyMDI:=TMDIChild.Create(AOwner);
// Parent := AOwner as TWinControl; // Почемуто ругаеться в этом месте :((
BevelInner := bvNone;
BevelOuter := bvNone;
Color := clWhite;
BorderStyle := bsNone;
end;

procedure TPreview.Paint;
begin
Draw(MyMDI.Idx);
end;

procedure TPreview.Draw(Value : Integer);
var MyRect : TMyRect;
Count : Integer;

procedure MyStyle;
begin
with Canvas do begin
Pen.Width := 1;
Brush.Style := bsSolid;
Font.Color := clBlack;
Font.Size := 10;
Font.Style := [fsBold];
end;
end;

procedure Table(Rects : TMyRect; Top, Field : Integer);
var Count : Integer;
begin
For Count:=1 to Field do
begin
Canvas.Rectangle(Rects.Left-2, Rects.Top-2, Rects.Right+2, Rects.Bottom+2);
Rects.Top:=Rects.Top+Top;
Rects.Bottom:=Rects.Bottom+Top;
end;
end;

procedure Print(Rects : TMyRect; Pozice : TMyPozice; Value: String);
begin
case Pozice of
pzCenter : Canvas.TextOut(Ceil((Rects.Right-Canvas.TextWidth(Value))/2+18),Rects.Top+5,Value);
pzLeft : Canvas.TextOut(Rects.Left+5,Rects.Top+5,Value);
end;
end;
begin
case Value of
1 :
begin
Width:=460;
Height:=350;
MyStyle;
MyRect.Left:=40 ; MyRect.Top:=80; MyRect.Right:=247; MyRect.Bottom:=107;
Count:=7;
Table(MyRect,30,Count);
end;

MyRect.Left:=247; MyRect.Top:=80; MyRect.Right:=454; MyRect.Bottom:=107;
Count:=7;
Table(MyRect,30,Count);
end;
end;
2 :
begin
Width:=460;
Count:=MainForm.MyData.Count-3;
Height:=Count*25;
MyStyle;
MyRect.Left:=40 ; MyRect.Top:=1; MyRect.Right:=247; MyRect.Bottom:=107;
Table(MyRect,25,Count);
end;
end;
end;

procedure TMDIChild.FormResize(Sender: TObject);
begin
// MyPrev.Left:=Ceil((ScrollBox1.Width-MyWidth)/2-15);
end;

procedure TMDIChild.FormDestroy(Sender: TObject);
begin
MyPrev.Free;
end;

constructor TMDIChild.CreateMDI(Sender: TObject; AIdx: integer);
begin
// MyPrev:=TPreview.Create(Self);
// MyPrev.parent:=ScrollBox1;
MyPrev:=TPreview.Create(self); // Работает только Self. Если пишу
With MyPrev Do begin // Sender то ругаеться
left:=0; Top:=0;
Height:=500; Width:=500;
Parent:=ScrollBox1;
End;
Idx:=AIdx;
end;

end.

Точно я где-то напортачил :((( А понять где могу.


 
cdaDmitriy   (2001-12-24 14:26) [12]

if Parent:=ScrollBox1;
Then MyPrev:=TPreview.Create(ScrollBox1);


If MyPrev:=TPreview.Create(self);
Then Parent:=Self;

constructor TPreview.Create(AOwner: TComponent);
begin
Inherited Create(AOwner); // ---??? я думаю что нужно
MyMDI:=TMDIChild.Create(AOwner); // ---??? 1 из них
BevelInner := bvNone;

// or func not good кто кого создает ?
// constructor TMDIChild.CreateMDI(Sender: TObject; AIdx:

integer);

BevelOuter := bvNone;
Color := clWhite;
BorderStyle := bsNone;
end;


 
NUU   (2001-12-25 14:01) [13]

Я так понимаю что если написать так:
constructor TMDIChild.CreateMDI(Sender: TComponent; AIdx: integer);
то потом можно будет Sender передать в качестве OWNERa:
MyPrev:=TPreview.Create(sender); // Работает только Self. Если пишу



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

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

Наверх




Память: 0.49 MB
Время: 0.004 c
4-42623
Семён
2001-11-10 09:36
2002.01.14
Создание главной формы с помощью WinApi


3-42389
Long
2001-12-10 17:01
2002.01.14
Для гуру IB


14-42550
wHammer
2001-11-16 15:29
2002.01.14
Nostalgia


1-42416
SergeyVP
2001-12-27 06:21
2002.01.14
Thread


4-42615
AlexandrH
2001-11-14 12:37
2002.01.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
Английский Французский Немецкий Итальянский Португальский Русский Испанский