SIGSEGV с TDBLookupComboBox на модальной форме

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение vitaly_l » 16.03.2017 07:46:03

pupsik писал(а):Осмелюсь спросить: вы хоть знаете что делает RecreateWnd?

Код: Выделить всё
{------------------------------------------------------------------------------
RecreateWnd
This function was originally member of TWincontrol. From a VCL point of view
that made perfectly sense since the VCL knows when a win32 widget has to be
recreated when properties have changed.
The LCL however doesn't know, the widgetset does. To avoid old VCL behaviour
and to provide a central function to the widgetset, it is moved here.
MWE.
------------------------------------------------------------------------------}
procedure RecreateWnd(const AWinControl:TWinControl);
var
  IsFocused: Boolean;
begin
  if csDestroying in AWinControl.ComponentState then Exit;
  if wcfCreatingHandle in AWinControl.FWinControlFlags then exit;

  if not AWinControl.HandleAllocated
  then begin
    // since only the interface (or custom interface dependent controls) should
    // call us, the handle is always created
    {$IFNDEF DisableChecks}
    DebugLN('WARNING: obsolete call to RecreateWnd for %s', [AWinControl.ClassName]);
    {$ENDIF}
    //DumpStack;
  end;

  IsFocused := AWinControl.Focused;
  AWinControl.DestroyHandle;
  AWinControl.UpdateControlState;
  if IsFocused and AWinControl.HandleAllocated
  then SetFocus(AWinControl.FHandle);
end;           
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение java73 » 17.03.2017 11:55:34

Закомментировал полностью всю RecreateWnd. Ничего не поменялось, всё работает. В dblookup и customform ничего не патчил.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение pupsik » 17.03.2017 12:20:17

java73 кардинально как то :shock: Может патч такой предложить? :))))
В особенности: что у вас там не работало, и что должно делать = неизвестность...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение vitaly_l » 17.03.2017 12:32:36

java73 писал(а):Закомментировал полностью всю RecreateWnd. Ничего не поменялось, всё работает. В dblookup и customform ничего не патчил.

Да, это ВРЕМЕННО решило Вашу проблему, но баг остался в Вашей программе, т.к. вызывать сбоев RecreateWnd - не должно.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение java73 » 17.03.2017 13:12:46

Посмотрим, что разработчики скажут)) у кого там баг
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение pupsik » 17.03.2017 13:34:22

java73 разработчики - образное понятие. Т.е. вы то же можете им стать. Было бы желание.

п.с.
Хотя да: куда веселей подождать (я это и о себе).
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение tema » 21.03.2017 00:16:01

Изменения за последнее время в транке
Код: Выделить всё
+++ lcl/dbctrls.pp   (working copy)
@@ -450,6 +450,7 @@
     procedure DataChange(Sender: TObject); override;
     procedure DoSelectionChange(User: Boolean); override;
     procedure InitializeWnd; override;
+    procedure DestroyWnd; override;
     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
     procedure Loaded; override;
     procedure UpdateData(Sender: TObject); override;
@@ -799,6 +800,7 @@
   protected
     procedure CloseUp; override;
     procedure InitializeWnd; override;
+    procedure DestroyWnd; override;
     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
     procedure Loaded; override;
     procedure UpdateData(Sender: TObject); override;

Код: Выделить всё
+++ lcl/include/dblookupcombobox.inc   (working copy)
@@ -57,6 +57,13 @@
     Text := '';
end;

+procedure TDBLookupComboBox.DestroyWnd;
+begin
+  inherited;
+  //after handle destroy Items address changes
+  FLookup.ControlItems := Items;
+end;
+
procedure TDBLookupComboBox.Select;
begin
   FDataLink.UpdateData;

Код: Выделить всё
+++ lcl/include/dblookuplistbox.inc   (working copy)
@@ -44,6 +44,13 @@
     ItemIndex := -1;
end;

+procedure TDBLookupListBox.DestroyWnd;
+begin
+  inherited;
+  //after handle destroy Items address changes
+  FLookup.ControlItems := Items;
+end;
+
procedure TDBLookupListBox.DoSelectionChange(User: Boolean);
begin
   if User then


Добавлено спустя 10 минут 7 секунд:
Разработчики пофиксили так:
http://svn.freepascal.org/cgi-bin/viewv ... sion=54441
tema
постоялец
 
Сообщения: 375
Зарегистрирован: 24.03.2011 20:19:27

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение zub » 21.03.2017 00:55:13

>>Изменения за последнее время в транке
Собственно это и есть фикс Ondrej Pokorny
Код: Выделить всё
Index: lcl/include/dblookupcombobox.inc
===================================================================
--- lcl/include/dblookupcombobox.inc   (revision 54440)
+++ lcl/include/dblookupcombobox.inc   (revision 54441)
@@ -57,6 +57,13 @@
     Text := '';
end;

+procedure TDBLookupComboBox.DestroyWnd;
+begin
+  inherited;
+  //after handle destroy Items address changes
+  FLookup.ControlItems := Items;
+end;
+
procedure TDBLookupComboBox.Select;
begin
   FDataLink.UpdateData;
Index: lcl/include/dblookuplistbox.inc
===================================================================
--- lcl/include/dblookuplistbox.inc   (revision 54440)
+++ lcl/include/dblookuplistbox.inc   (revision 54441)
@@ -44,6 +44,13 @@
     ItemIndex := -1;
end;

+procedure TDBLookupListBox.DestroyWnd;
+begin
+  inherited;
+  //after handle destroy Items address changes
+  FLookup.ControlItems := Items;
+end;
+
procedure TDBLookupListBox.DoSelectionChange(User: Boolean);
begin
   if User then
Index: lcl/dbctrls.pp
===================================================================
--- lcl/dbctrls.pp   (revision 54440)
+++ lcl/dbctrls.pp   (revision 54441)
@@ -450,6 +450,7 @@
     procedure DataChange(Sender: TObject); override;
     procedure DoSelectionChange(User: Boolean); override;
     procedure InitializeWnd; override;
+    procedure DestroyWnd; override;
     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
     procedure Loaded; override;
     procedure UpdateData(Sender: TObject); override;
@@ -799,6 +800,7 @@
   protected
     procedure CloseUp; override;
     procedure InitializeWnd; override;
+    procedure DestroyWnd; override;
     procedure KeyDown(var Key: Word; Shift: TShiftState); override;
     procedure Loaded; override;
     procedure UpdateData(Sender: TObject); override;

Репорт закройте и ищите-пишите новые
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение java73 » 21.03.2017 09:49:36

Ну и у кого там код с багами
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение zub » 21.03.2017 10:30:05

У меня. У тебя. у всех
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение pupsik » 21.03.2017 10:41:05

Можно сказать: красиво.

Ну и у кого там код с багами
у программиста пишущего программу. Или вы суп..пер- п..пупер безошибочный с первого раза?
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: SIGSEGV с TDBLookupComboBox на модальной форме

Сообщение java73 » 22.03.2017 19:42:00

А я и не программист. Нуждазаставила, а там понеслось. Два года уже пользуюсь, сэкономил мож 50% рабочего времени.
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Пред.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 32

Рейтинг@Mail.ru