Форум: "Основная";
Текущий архив: 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.005 c