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

Вниз

Разница межу D7 и D2010+   Найти похожие ветки 

 
kaldirishe   (2014-08-27 19:05) [0]

Здравствуйте!
Столкнулся со следующей проблемой: компилирую библиотеку, написанную в D7, под D2010 и далее, все Ок, но есть проблема, с ходу, которую, я разрешить не могу:
У меня компонент, выводится из TForm, в процедуре Create, создает несколько объектов, участвующих в процедуре Loaded...
В D6 и D7 последовательность конструктора:
inherited;
создание;
и по дебагеру Loaded;
работает,
а в D2010 по чему-то:
inherited;
по дебагеру Loaded;
создание;
Я как то не могу сообразить когда создавать объекты, объявленные в секции published

Я вот в полном... посоветуйте плиз, как переписать, спасибо


 
Rouse_ ©   (2014-08-27 19:16) [1]

Создавай перед вызовом inherited, а вообще - чей-то странная у тебя архитектура, судя по объяснению...


 
kaldirishe   (2014-08-27 19:56) [2]

>Rouse_ Спасиб)
Стандартная, я вставлю конструкоты ()  и Loaded:
так вот, loaded работает ренее CreateNew, да и в вариациях тоже(

constructor TlfCustomLayerForm.Create(AOwner: TComponent);
begin
 inherited Create(AOwner);
 if not (csDesigning in ComponentState) then
 begin
   SetWindowLong(Handle, GWL_EXSTYLE, GetWindowLong(Handle,
     GWL_EXSTYLE) or WS_EX_LAYERED);
 end;
end;

constructor TlfCustomLayerForm.CreateNew(AOwner: TComponent; Dummy: Integer =
 0);
begin
 inherited;

 if not IsWin2K then
   raise Exception.Create("Only for Win2k");

 with FBlend do
 begin
   BlendOp := AC_SRC_OVER;
   BlendFlags := 0;
   SourceConstantAlpha := 255;
   AlphaFormat := AC_SRC_ALPHA;
 end;
 FBmpTopLeft := Point(0, 0);

 FAlphaBlend := True;
 FAlphaBlendValue := 255;
 FAutoScroll := False;
 FBitmapObject := TlfBitmapObject.Create;
 FBitmaps := nil;
 FBitmapsLink := TlfBitmapsLink.Create;
 FBitmapsLink.OnChange := BitmapsChange;
 FBorderStyle := bsNone;

 FCountInvalidate := 0;
 FCountPaint := 0;
 FCountPosition := 0;

 FDraggAble := True;
 FFormMinimizedState := fsDefault;
 FFormNormalState := fsDefault;
 FillChar(FFormSize, SizeOf(FFormSize), 0);

 FImage := -1;
 FImageMinimize := -1;
 FLoaded := False;
 FMagnetic := False;
 FMagneticSize := 10;
 FMinimizeWidth := 100;
 FMinimizeHeight := 25;
 FMenu := nil;
 FWnd := Classes.AllocateHWnd(HandleIconMessage);
 FTrayHint := "";
 FTrayIcon := TIcon.Create;
 with FTrayIconData do
 begin
   cbSize := SizeOf(TNotifyIconDataEx);
   wnd := FWnd;
   uId := IconID;
   uFlags := NIF_ICON + NIF_MESSAGE + NIF_TIP;
   uCallbackMessage := WM_TRAYNOTIFY;
 end;
 FControls := TlfControlCollection.Create(Self,
   TlfControlItem);
 FControls.OnChanged := Changed;
 FTrayPopupMenu := nil;

 FWindowState := lsNormal;
 FWndLayerForm := TlfWndLayerForm.Create(nil);
 FWndLayerForm.Control := Self;
 FWndLayerForm.OnInvalidate := NeedCountInvalidate;
 FWndLayerForm.OnUpdate := NeedCountPaint;

 if not (csDesigning in ComponentState) then
   SetBorderStyle(bsNone);
end;
........................

procedure TlfCustomLayerForm.Loaded;
begin
 inherited;
 if not (csDesigning in ComponentState) then
 begin
   with FFormSize do
   begin
     MinimizeLeft := Left;
     MinimizeTop := Top;
     NormalLeft := Left;
     NormalTop := Top;
     NormalClientWidth := Width;
     NormalClientHeight := Height;
   end;
   FBitmapObject.SetSize(Width, Height);
   DoLayerImageUpdate;
   SetCountInvalidate(FCountInvalidate + 1);
   SetCountPaint(FCountPaint + 1);
   FLoaded := True;
 end
 else
   SetAutoScroll(False);
end;


 
kaldirishe   (2014-08-27 19:59) [3]

Вышибает на FBitmapObject.SetSize(Width, Height); потому что nil(


 
Rouse_ ©   (2014-08-27 20:01) [4]

А зачем ты так все разнес-то? :)


 
kaldirishe   (2014-08-27 20:11) [5]

Разнес, наблюдая исходники, и реакцию) Вот повезло на гуру попасть, я на твоем примере сделал прогу на основе "обратных интерфейсов". Мы кустари, я писал, что "перекрашу" кнопку как хочу, я сделал это, но столкнулся с непонятками, поэтому прошу ...___...


 
kaldirishe   (2014-08-27 20:21) [6]

То есть создавать до вызова конструктора?


 
Rouse_ ©   (2014-08-27 21:20) [7]


> Вот повезло на гуру попасть

Зотыча тут еще небыло - ты меня перепутал с кем-то.


> То есть создавать до вызова конструктора?

Все это разнесенное безобразие засунь в одну процедуру и назови ее к примеру MainInit и будет достаточно.
А ее в конструкторе и дергай.
Loaded тут избыточно.


 
kaldirishe   (2014-08-27 23:18) [8]

А с чем связано такое изменение в этих версиях (я к тому, что может быть релиз какой -нить с объяснениями), может если есть объяснение - есть и метод?


 
junglecat   (2014-08-28 08:51) [9]

фишка в том, чтобы твой код не зависел (или как можно меньше) от изменения в версиях.
Инициализацию надо проводить 1 раз в 1 месте, так же как и финализацию.


 
kaldirishe   (2014-08-31 14:42) [10]

>Rouse_ © & junglecat  
Разнести нельзя, сначала надо создать объект, потом дождаться inherited Loaded и только после объект инициализировать (в моем случаи использовать размеры формы)
Ндя... Чтобы разобраться пришлось ставить XE с исходниками...
Действительно последовательность вызовов поменялась и появилась новая процедурка InitializeNewForm, которая, как я понял и призвана решить проблемы моего типа). Собственно перекрывается и туда запихивается все необходимое при создании как для версии 7.



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

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

Наверх





Память: 0.47 MB
Время: 0.002 c
15-1437484469
sniknik
2015-07-21 16:14
2016.03.27
Как включить пс спикер в Win7?


2-1409151951
kaldirishe
2014-08-27 19:05
2016.03.27
Разница межу D7 и D2010+


15-1437066217
Rouse_
2015-07-16 20:03
2016.03.27
Получение метаданных медиафайла посредством WebAudio Api


15-1436563802
Юрий
2015-07-11 00:30
2016.03.27
С днем рождения ! 11 июля 2015 суббота


2-1409638456
leshka-m
2014-09-02 10:14
2016.03.27
Подключение к 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский