Текущий архив: 2007.02.25;
Скачать: CL | DM;
Внизпроблемы с созданием компонента Найти похожие ветки
← →
i-am-vladko © (2007-01-08 12:51) [0]
unit MyUnit;
interface
uses
Classes, SysUtils, GRaphics, Controls, Dialogs
Variants, LMDControl, LMDBaseControl, LMDBaseGraphicButton,
LMDCustomShapeButton, LMDShapeButton, LMDSplt,
LMDSimplePanel, LMDFormDisplay, LMDFill;
type
TDirection = (sdHorisontal, sdVertical);
TSplitterPlace = (ossEven);
TLMDBorderStyle = (lsDoubleLovered, lsDoubleRaised,
lsNone, lsFrameInset, lsFrameOffset,
lsLowered, lsLoweredExt, lsLoweredspb,
lsRaised, lsRaisedExt, lsRaisedspb,
lsSingle, lsSingleLowered, lsSingleRaised,
lsWindowBorder);
TLMDSplitPane = class(TLMDSplitterPane)
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
TLMDCustomSplitter = class(TWinControl)
protected
FColor: TColor;
FSplitPos: integer;
FSplitMin: integer;
FSplitMax: integer;
FSplitWidth: integer;
FDirection: TDirection;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property Position: integer read FSplitPos write FSplitPos;
property Min: integer read FSplitMin write FSplitMin;
property Max: integer read FSplitMax write FSplitMax;
property Width: integer read FSplitWidth write FSplitWidth;
property Color: TColor read FColor write FColor;
property Direction: TDirection read FDirection write FDirection;
end;
TLMDMainSplitter = class(TLMDCustomSplitter)
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
TLMD4Pane3SplitCtrl = class(TLMDSplitterPanel)
private
FBorderStyle: TLMDBorderStyle;
FOnSplitterChange: TNotifyEvent;
FSplitter3: TLMDCustomSplitter;
FSplitter2: TLMDCustomSplitter;
FMainSplit: TLMDMainSplitter;
FSplitterPlace: TSplitterPlace;
aPane: array[0..3] of TLMDSplitPane;
function GetSplitPane(index: integer): TLMDSplitPane;
procedure SetSplitPane(index: integer; Value: TLMDSplitPane);
protected
procedure Loaded; override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
published
property BorderStyle: TLMDBorderStyle read FBorderStyle write FBorderStyle;
property SplitterPlace: TSplitterPlace read FSplitterPlace write FSplitterPlace;
property Splitter2: TLMDCustomSplitter read FSplitter2 write FSplitter2;
property Splitter3: TLMDCustomSplitter read FSplitter3 write FSplitter3;
property SplitterMain: TLMDMainSplitter read FMainSplit write FMainSplit;
property Pane0: TLMDSplitPane index 0 read GetSplitPane write SetSplitPane;
property Pane1: TLMDSplitPane index 1 read GetSplitPane write SetSplitPane;
property Pane2: TLMDSplitPane index 2 read GetSplitPane write SetSplitPane;
property Pane3: TLMDSplitPane index 3 read GetSplitPane write SetSplitPane;
property OnSplitterChange: TNotifyEvent read FOnSplitterChange write FOnSplitterChange;
end;
procedure Register;
implementation
{*.dfm}
procedure Register;
begin
RegisterComponents("alphaA", [TLMD4Pane3SplitCtrl]);
end;
{ TLMD4Pane3SplitCtrl }
constructor TLMD4Pane3SplitCtrl.Create(AOwner: TComponent);
var i: integer;
begin
inherited Create(AOwner);
Parent := AOwner as TWinControl;
if (csDesigning in ComponentState) then
for i := 0 to 3 do
begin
aPane[i] := TLMDSplitPane.Create(self);
aPane[i].Parent := self;
AddPane(aPane[i]);
end;
FSplitter3 := TLMDCustomSplitter.Create(self);
FSplitter2 := TLMDCustomSplitter.Create(self);
FMainSplit := TLMDMainSplitter.Create(self);
end;
destructor TLMD4Pane3SplitCtrl.Destroy;
var i: integer;
begin
for i := 3 downto 0 do
if Assigned(aPane[i]) then aPane[i].Destroy;
if Assigned(FSplitter2) then FSplitter2.Destroy;
if Assigned(FSplitter3) then FSplitter3.Destroy;
if Assigned(FMainSplit) then FMainSplit.Destroy;
inherited;
end;
function TLMD4Pane3SplitCtrl.GetSplitPane(index: integer): TLMDSplitPane;
begin
Result := aPane[index];
end;
procedure TLMD4Pane3SplitCtrl.Loaded;
var i: integer;
begin
inherited Loaded;
{for i := 3 to 6 do
if Assigned(aPane[i]) then begin
aPane[i]:= nil;
end;}
end;
procedure TLMD4Pane3SplitCtrl.SetSplitPane(index: integer;
Value: TLMDSplitPane);
begin
aPane[index] := Value;
end;
{ TLMDCustomSplitter }
constructor TLMDCustomSplitter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TLMDCustomSplitter.Destroy;
begin
inherited Destroy;
end;
{ TLMDSplitPane }
constructor TLMDSplitPane.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TLMDSplitPane.Destroy;
begin
inherited Destroy;
end;
{ TLMDMainSplitter }
constructor TLMDMainSplitter.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
end;
destructor TLMDMainSplitter.Destroy;
begin
inherited Destroy;
end;
initialization
RegisterClasses([TLMDSplitPane]);
end.
Скриншоты:
http://ifolder.ru/812880
http://ifolder.ru/812897
Вопрос:
вместо 4 - панелей на TLMD4Pane3SplitCtrl их 8, если сохранить проект, закрыть его и снова загрузить.
Что не так??? всю ночь промучился - не могу найти ответ. Помогите, плз...
← →
i-am-vladko © (2007-01-08 14:23) [1]кому интересно LMD для D5-6-7 здесь : http://ifolder.ru/813618
← →
Palladin © (2007-01-08 15:04) [2]не знаю что там по поводу 8, но возможно причина кроется в этом
procedure TLMD4Pane3SplitCtrl.SetSplitPane(index: integer;
Value: TLMDSplitPane);
begin
aPane[index] := Value;
end;
учти, что при обращении к свойству на запись, старая aPane не уничтожается, соответственно сколько раз ты присвоил значение одному из свойств столько aPane и добавилось... просто ссылки на них теряются, остаются только в Components
← →
i-am-vladko © (2007-01-08 16:03) [3]причина не в этом - сейчас переписал и тот же эффект
procedure TLMD4Pane3SplitCtrl.SetSplitPane(index: integer;
Value: TLMDSplitPane);
if not Assigned(Value) or (Value = nil)
then exit;
aPane[index].AutoScroll := Value.AutoScroll;
aPane[index].AutoSize := Value.AutoSize;
FreeAndNil(Value);
end;
← →
Чапаев © (2007-01-08 17:27) [4]> property Pane0: TLMDSplitPane index 0 read GetSplitPane
> write SetSplitPane;
Лично я бы запись не разрешал. Создавай их при создании основного объекта, если надо изменить -- используй Assign().
> вместо 4 - панелей на TLMD4Pane3SplitCtrl их 8, если сохранить
> проект, закрыть его и снова загрузить.
С Loaded() перемудрил, надо полагать.
← →
i-am-vladko © (2007-01-08 17:30) [5]Loaded вообще убрал!
← →
i-am-vladko © (2007-01-08 17:34) [6]полностью запретил запись
property Pane0: TLMDSplitPane index 0 read GetSplitPane write SetSplitPane;
где - то в другом ошибка
← →
i-am-vladko © (2007-01-08 17:35) [7]
property Pane0: TLMDSplitPane index 0 read GetSplitPane;
- сейчас так
← →
Чапаев © (2007-01-08 17:50) [8]> Parent := AOwner as TWinControl;
Руки отбивать. Без комментариев.
> if (csDesigning in ComponentState) then
> for i := 0 to 3 do
> begin
> aPane[i] := TLMDSplitPane.Create(self);
> aPane[i].Parent := self;
> AddPane(aPane[i]);
> end;
Этот "заглавный" if зачем?
А вообще проверь, не остались ли старые *.dcu от твоего компонента где-нибудь в системных каталогах.
← →
i-am-vladko © (2007-01-08 17:57) [9]
> > Parent := AOwner as TWinControl;
> Руки отбивать. Без комментариев.
знаю что нельзя...
без этого Design-time компонент не помещается на форму - Control "" has no parent window
> Этот "заглавный" if зачем?
без него лишние панели создаются при каждом Run-time
← →
Чапаев © (2007-01-08 18:28) [10]> без этого Design-time компонент не помещается на форму -
> Control "" has no parent window
Потомки пытаются рисоваться, когда рисоваться им ещё не на чем.
← →
i-am-vladko © (2007-01-08 18:56) [11]
> Потомки пытаются рисоваться, когда рисоваться им ещё не
> на чем.
Понятненько... а как нужно сделать? Рисовать их ведь нужно когда Parent стоит... замкнутый круг...
← →
Чапаев © (2007-01-08 19:09) [12]С LMD tools не работал, не знаю специфики тамошних компонентов.
← →
i-am-vladko © (2007-01-09 11:45) [13]
> С LMD tools не работал, не знаю специфики тамошних компонентов.
да вобщем это и хорошо )) не советую - кривовато писаны, есть небольшие баги и встречается непредсказуемое повeдение... самая большая проблема - в переносимости : на разных Делфи компоненты, классы и модули в корне различны (не все, конечно - но создает кучу проблем), к тому же нет Sourse Code.
Страницы: 1 вся ветка
Текущий архив: 2007.02.25;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.047 c