Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.08.19;
Скачать: CL | DM;

Вниз

Как динамически добавить фрейм на форму?   Найти похожие ветки 

 
ttt   (2002-08-08 15:10) [0]

Пишу
frame:=TFrame1.Create(Form1);
Form1.InsertControl(frame);
На первой строке получаю ошибку: "Control "Frame1" has no parent window". Как тут быть?


 
Nikolai_S ©   (2002-08-08 15:18) [1]

Frame1.Parent := Form1;

Одной этой строки достаточно.


 
Nikolai_S ©   (2002-08-08 15:19) [2]

Ну естественно это фрейм нужно сначала создать:

var
Frame1: TFrame1;
begin
Frame1 := TFrame1.Create(Form1);
Frame1.Parent := Form1;
end;


 
ttt   (2002-08-08 15:25) [3]

В том-то и дело, что до второй строки вообще программа не доходит, а ошибка после первой строки(Create). Хоть так, хоть сяк пиши - ничего не меняется.


 
AL2002 ©   (2002-08-08 15:35) [4]

Frame1:=TFrame1.Create(nil);


 
ttt   (2002-08-08 15:42) [5]

Тот же результат


 
Skier ©   (2002-08-08 15:48) [6]

>ttt
Где ты всё это пишешь ? В каком месте ??
Код ПОЛНОСТЬЮ в студию...


 
AL2002 ©   (2002-08-08 15:53) [7]

Напиши, какая ошибка.


 
ttt   (2002-08-08 16:15) [8]

Есть dll.

library Reports;

uses
SysUtils,
Classes,
Dialogs,
Forms,
Controls,
DB,
DBTables,
Excel2000,
DateUtils,
Math,
Variants,
...
PeriodDefFrame in "PeriodDefFrame.pas" {Frame1: TFrame},
ProgressForm in "ProgressForm.pas" {ProgressFrm};

function GetReport(FormType,Form,Data,Pattern:shortstring;year,month,day,smena,numsmen,year1,month1,day1,smena1:variant):boolean;
var frame1:TFrame1;
begin
...
ProgressFrm:=TProgressFrm.Create(Application);
frame1:=TFrame1.Create(Application);// ОШИБКА ЗДЕСЬ
frame1.Parent:=ProgressFrm;
...
end;

exports
...
GetReport;

begin
...
end.


Frame:

unit PeriodDefFrame;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DB, DBTables, ComCtrls, ExtCtrls, StdCtrls, Excel2000, OleServer, Spin,
Variants, DateUtils, Math, ActiveX, Buttons;

type
TFrame1 = class(TFrame)
BeginGroupBox: TGroupBox;
YearLabel: TLabel;
MonthLabel: TLabel;
DayLabel: TLabel;
SmenaLabel: TLabel;
YearSpinEdit: TSpinEdit;
MonthComboBox: TComboBox;
DayComboBox: TComboBox;
SmenaRadioGroup: TRadioGroup;
NumSmenComboBox: TComboBox;
EndGroupBox: TGroupBox;
Year1Label: TLabel;
Month1Label: TLabel;
Day1Label: TLabel;
Smena1Label: TLabel;
Year1SpinEdit: TSpinEdit;
Month1ComboBox: TComboBox;
Day1ComboBox: TComboBox;
Smena1RadioGroup: TRadioGroup;
PatternWorkbook: TExcelWorkbook;
ExcelApplication1: TExcelApplication;
DataWorkbook: TExcelWorkbook;
QueryPeriod: TQuery;
QuerySmen: TQuery;
QueryMonth: TQuery;
pbReport: TProgressBar;
plReport: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
QueryPeriod0: TQuery;
QuerySmen0: TQuery;
QueryMonth0: TQuery;
procedure ShowButtonClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
FRepSrcID: integer;
FRepSrcName: string;
FPatternName: string;
FPatternID: integer;
{ Private declarations }
procedure CalcDataSheet;
procedure SetRepSrcID(const Value: integer);
procedure SetRepSrcName(const Value: string);
procedure SetPatternID(const Value: integer);
procedure SetPatternName(const Value: string);
procedure DataPrepare(pathSrc:string; var DataWorkbook:_WorkBook);
procedure PatternPrepare(pathPattern:string);
procedure xlReport1AfterBuild(Report: TxlReport);
procedure xlReport1Progress(Report: TxlReport; const Position,
Max: Integer);
procedure xlReport1BeforeBuild(Report: TxlReport);
public
{ Public declarations }
ProgressLabel:TLabel;
ProgressBar:TProgressbar;
xlReport1:TxlReport;
property RepSrcID:integer read FRepSrcID write SetRepSrcID;
property RepSrcName:string read FRepSrcName write SetRepSrcName;
property PatternID:integer read FPatternID write SetPatternID;
property PatternName:string read FPatternName write SetPatternName;
procedure CheckAvailableControls;
procedure DoBeforeCreate;
procedure DoBeforeDestroy(Sender: TObject);
end;

implementation
...
end;


Затем вызывается функция из dll:

unit Unit3;
...
TFunc= function(FormType,Form,Data,Pattern:shortstring;year,month,day,smena,numsmen,year1,month1,day1,smena1:variant):boolean;

...

procedure TForm3.Button2Click(Sender: TObject);
var f:TFunc;
Handle:integer;
begin
try
handle:=LoadLibrary("Reports.dll");
if Handle<>0 then
begin
f:=GetProcAddress(handle,"GetReport");
f(DBEdit1.Text,DBEdit2.Text,DBEdit3.Text,DBEdit4.Text,2000,8,8,1,null,null,null,null,null);
end;
finally
FreeLibrary(handle);
end;
end;

...


 
Ura   (2002-08-08 16:19) [9]

1. Проверь Aplication проги и в DLL Равный?
2. Может надо для репорта еще и TScree передать?


 
Skier ©   (2002-08-08 16:21) [10]

>ttt

function GetReport( AAppHandle : THandle; FormType,Form,Data,Pattern: PChar;year,month,day,smena,numsmen,year1,month1,day1,smena1: variant !!!)


Вообще удивительно как у тебя всё это работает !
Тебе бы книжки почитать про DLL...


 
ttt   (2002-08-08 16:42) [11]

Похоже, заковырка в самом фрейме. С другим фреймом всё работает.


 
Набережных С.   (2002-08-08 20:37) [12]

Вероятно, в конструкторе фрейма сидит SetFocus.
Если так, то замени его на ActiveControl.



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

Текущий архив: 2002.08.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
1-60738
mmb
2002-08-07 11:41
2002.08.19
TCanvas можно ли создавать в run-time


7-60879
urich
2002-06-06 11:41
2002.08.19
Как добавить принтер в систему?


14-60823
Alx2
2002-07-23 13:38
2002.08.19
Задачка


1-60641
Ghost.
2002-08-05 17:40
2002.08.19
Вопрос для тех кто работал с формами в DLL


1-60568
Dmk
2002-08-06 23:46
2002.08.19
Как высоту Caption формы сделать поменьше.