Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2010, 08:06   #11
NervniiJ
Похмел
Пользователь
 
Регистрация: 10.01.2010
Сообщений: 16
По умолчанию

В деструктуре Inherited вызывай после KillTimer(Handle, 1);
В противном случае, твоя "бага" - имеет право на жизнь.
NervniiJ вне форума Ответить с цитированием
Старый 10.03.2010, 18:23   #12
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

raxp, я вот тоже еще до создания этой темы использовал ваш способ работы с Таймером, а потом чего то дернуло в сообщении обрабатывать. Ну да ладно, все равно спасибо, пускай будет TTimer...
У меня к вам еще вопрос, вы вот написали
Цитата:
компоненты под opengl наследую обычно от tpanel.
посмотрев класс TPanel я увидел, что там только декларации свойств из класса TCustomPanel. Так вот, может быть мене есть смысл лучше унаследовать свой компонент именно от TCustomPanel?

NervniiJ, спс конечно, но это я уже понял из 2го поста, за что спасибо Пепел Феникса
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.03.2010, 19:52   #13
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

еще, в комопнентах использую такую конструкцию:
Код:
 if FTimer<>0 then timeKillEvent(FTimer);
 ...
и
 ...
  FTimer:= timeSetEvent(Interval,0,@RemoteTimeProc,DWORD(Self),TIME_PERIODIC);
  Win32Check(FTimer<>0)
тоже стабильно себя ведет... что касаемо tpanel, вы правы можно и TCustomPanel... просто с первым мне удобнее по части обработки событий, например мышки.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 10.03.2010 в 19:55.
raxp вне форума Ответить с цитированием
Старый 10.03.2010, 22:27   #14
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Ну вот с Таймер вроде разобрался
С классом родителем также вроде разобрался.
А вот насчет процедуры установки формата пикселя еще есть вопрос:
Есть процедура GLSSetPixelFormat;
Код:
  
  ...

  fHDC := GetDC(Self.Handle);
  PF := ChoosePixelFormat(fHDC, @PFd);
  if PF <> 0 then SetPixelFormat(fHDC, PF, @PFD);
  fHGLRC := wglCreateContext(fHDC);
  if fHGLRC <> 0 then wglMakeCurrent(fHDC, fHGLRC);
и все тот же Self.Handle - когда я вызываю данную процедуру в конструкторе, то вылазит таже самая ошибка, что я приводил в 1м посте. Как с этим бороться? И вообще, где лучше вызывать процедуру настройки формата пикселя?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 10.03.2010, 22:30   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а можно весь конструктор увидеть?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 10.03.2010, 22:36   #16
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а можно весь конструктор увидеть?
Конечно можно
Код:
constructor TPDM3DLable.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Self.Height := 120;
  Self.Width := 300;
  fAngelX := 0;
  fAngelY := 0;
  fCornerVision := CGL_CORNER_VISION;
  fScale := 1;
  fDistanceLines := CGL_DEFAULT_DISTANCE_LINES;
  fDistanceSymbols := CGL_DEFAULT_DISTANCE_SMBOLS;
  Self.Canvas.Font.Height := CGL_FONT_HEIGHT;
  fFontName := CGL_FONT_NAME;
  fFontSize := CGL_DEFAULT_FONT_SIZE;
  fFontCharset := Self.Font.Charset;
  fText := TStringList.Create;
  fText.Add('Привет');
  fCountLines := CGL_COUNT_LINES;
end;
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 11.03.2010, 00:33   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в конструкторе в хендлом проблемы(вспомнил свою проблему, но я о ней не писал) вам нужно сообщение WM_CREATE обрабатывать
Код:
  Self.Height := 120;
  Self.Width := 300;
дурной тон, установите у св-в default нужное(Рэй Конопка неплохо описал о компонентах)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.03.2010, 00:48   #18
пауэрлифтинг
Заблокирован
 
Регистрация: 11.12.2009
Сообщений: 133
По умолчанию

при создании MyObject := TPDM3DLable.Create(self);
вместо self пиши родителя (form1 например)

попробуй так Self.parent.Handle или Tform(Self).parent.Handle
пауэрлифтинг вне форума Ответить с цитированием
Старый 11.03.2010, 00:48   #19
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...и добавлю, createdc лучше в wmpaint перенести:
Код:
procedure Tpgl.WMPaint(var Msg: TWMPaint);
var ps: TPaintStruct;
begin
 BeginPaint(Handle, ps);

 if DC=0 then CreateDC;
 glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);

  ...
бла-бла-бла
  ...
   
 SwapBuffers(DC);
 EndPaint(Handle, ps)
end;

procedure Tpgl.CreateDC;
var nPixelFormat: Integer;
    pfd: TPixelFormatDescriptor;
begin
 DC:= GetDC(handle);

 FillChar(pfd,SizeOf(pfd),0);
 with pfd do begin
  nSize     := sizeof(pfd);
  nVersion  := 1;
  dwFlags   := PFD_DRAW_TO_WINDOW or
               PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER
               or PFD_GENERIC_ACCELERATED ;
  iPixelType:= PFD_TYPE_RGBA;
  cColorBits:= 32;
  cDepthBits:= 32;
  iLayerType:= PFD_MAIN_PLANE;
 end;
 nPixelFormat:= ChoosePixelFormat(DC, @pfd);
 SetPixelFormat(DC,nPixelFormat,@pfd);
 hrc:= wglCreateContext(DC);
 wglMakeCurrent(DC, hrc);

 CreateGLFont;
...
и почему-бы просто handle не использовать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 11.03.2010, 00:51   #20
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Цитата:
вам нужно сообщение WM_CREATE обрабатывать
Хорошо, попробую отпишусь.

Цитата:
дурной тон, установите у св-в default нужное
Это я понял. Просто сейчас все на скорую руку клепаю

Цитата:
(вспомнил свою проблему, но я о ней не писал)
А проблема похожа на мою? Как вы ее решили, обрабатывая сообщение WM_CREATE ?

EDIT:
Пока писал свой пост, появилось еще два новых. Спасибо народ. Сейчас буду что то пробовать. Потом отпишусь.

Цитата:
и почему-бы просто handle не использовать.
Собственно не знаю. Привычка может такая...))) Разницы же вроде нету.?
Будь проще и люди к тебе потянутся

Последний раз редактировалось spamer; 11.03.2010 в 00:55.
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка AV при уничтожении объектов из модулей(dll) puga555 Общие вопросы Delphi 4 08.01.2010 22:14
Заменить стандартное событие компонента при создании своего. postal2 Компоненты Delphi 6 28.08.2009 11:01
Проблема при создании компонента Levsha100 Компоненты Delphi 3 02.05.2009 12:05
Проблема перехвата сообщений при создании невизуального компонента volod3000 Компоненты Delphi 7 08.03.2009 14:13