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

Вниз

проблемы с созданием компонента   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.055 c
11-1148658085
Kealon
2006-05-26 19:41
2007.02.25
FontDialog


2-1170556818
Riply
2007-02-04 05:40
2007.02.25
Обращение к свойству класса после вызова Destroy.


2-1170605257
Гость_
2007-02-04 19:07
2007.02.25
SQL фрагмент


15-1170648076
Slider007
2007-02-05 07:01
2007.02.25
С днем рождения ! 3 февраля


15-1170423574
Vlad Oshin
2007-02-02 16:39
2007.02.25
Как подключится к MySql не с локального компьютера





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский