Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.08.2015, 18:06
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
Вопрос Thumbnail Toolbars RunTime error 216 WinApi

Здравствуйте.

Сделал Thumbnail Toolbars. Кнопки появились.

Но стоит завершить работу приложения, вылезает Runtime error 216 at 00407fd0.

Что делать, естественно, не знаю.

Код:
unit Unit1;

interface

uses
  Windows, Messages, ShlObj, ActiveX;

  Procedure WinMain;

var

   WndClassEx : TWndClassEx;
   Form : HWND;
   MMsg: Msg;
   tbCreated : Cardinal;
   pButtons : array[0..3] of TThumbButton;
  tb : iTaskBarList4;

implementation

procedure InitTaskBar;
var
  z:integer;
begin
  CoCreateInstance(CLSID_TaskbarList, nil, CLSCTX_ALL, iTaskBarList4,tb);

  for z in [0..3] do
    begin
      pButtons[z].iId := z;
      pButtons[z].iBitmap := z;
      pButtons[z].dwMask := THB_BITMAP + THB_TOOLTIP;
    end;
  pButtons[0].szTip := '1';
  pButtons[1].szTip := '2';
  pButtons[2].szTip := '3';
  pButtons[3].szTip := '4';
//  tb.ThumbBarSetImageList(Form, ImgList);
  tb.ThumbBarAddButtons(Form, length(pButtons), @pButtons);
  tb.SetProgressValue(Form, 50, 100);
end;

Function WinProc(Wnd: HWND; Msg : UINT; WParam : WPARAM; LParam: LPARAM): lresult; Stdcall;
Begin
  Result := 0;
  Case Msg Of
    WM_CREATE: tbCreated := RegisterWindowMessage('TaskbarButtonCreated');

    WM_CLOSE: DestroyWindow(Wnd);

    WM_DESTROY: PostQuitMessage(0);
    Else
      Result := DefWindowProc(Wnd, Msg, WParam, LParam);
  End;

  if msg = tbCreated then
    InitTaskBar;
End;

Procedure WinMain;
Begin
  FillChar(WndClassEx, SizeOf(TWndClassEx), 0);
  WndClassEx.cbSize := SizeOf(TWndClassEx);
  WndClassEx.lpszClassName := 'APIWindow';
  WndClassEx.style := CS_HREDRAW Or CS_VREDRAW;
  WndClassEx.hInstance := HInstance;
  WndClassEx.lpfnWndProc := @WinProc;
  WndClassEx.cbClsExtra := 0;
  WndClassEx.cbWndExtra := 0;
  WndClassEx.hIcon := LoadIcon(HInstance, MakeIntResource('MAINICON'));
  WndClassEx.hIconSm := LoadIcon(HInstance, MakeIntResource('MAINICON'));
  WndClassEx.hCursor := LoadCursor(0, IDC_ARROW);
  WndClassEx.hbrBackground := GetStockObject(LTGRAY_BRUSH);
  WndClassEx.lpszMenuName := NIL;


  If RegisterClassEx(WndClassEx) <> 0 Then
    Begin
      Form := CreateWindowEx(0, WndClassEx.lpszClassName, '123',WS_CLIPCHILDREN or WS_OVERLAPPEDWINDOW,
              (GetSystemMetrics(SM_CXSCREEN) - 500) div 2, (GetSystemMetrics(SM_CYSCREEN) - 500) div 2, 500, 500, 0, 0, HInstance, NIL);

      If Form = 0 Then
        MessageBox (0, 'Окно1 не создалось!', 'Ошибка', MB_OK Or MB_ICONHAND)
      Else
        Begin
          ShowWindow(Form, SW_SHOWNORMAL);
          While GetMessage(MMsg, 0, 0, 0) Do
            Begin
              TranslateMessage(MMsg);
              DispatchMessage(MMsg);
            End;
          Halt(MMsg.WParam);
        End;
    End
  Else
    MessageBox(0, 'Невозможно зарегистрировать класс окна1', 'Ошибка', MB_OK Or MB_ICONHAND);
End;

end.


Что не так сделал или не доделал?

Последний раз редактировалось Stalker2-42, 29.08.2015 в 18:20.
Ответить с цитированием
  #2  
Старый 30.08.2015, 21:23
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Ну подскажите пожалуйста.
Неужели все все равно или так трудно помочь(хотя бы направить)?
СПАСИБО!!!
Ответить с цитированием
  #3  
Старый 31.08.2015, 00:29
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 340
Версия Delphi: 11.3
Репутация: 429
Сообщение

Цитата:
Сообщение от Stalker2-42
Неужели все все равно или так трудно помочь(хотя бы направить)?
Направляю: Ошибка 216 - нарушение доступа. Ошибка возникает при повреждении данных во время работы с указателями и памятью.
Так может произойти, например, при установке некорректного значения какого-либо дескриптора, и последующей попытке освобождения ресурсов, связанных с этим дескриптором. Если выдаётся внешний код ошибки вместо исключительной ситуации, то можно попробовать подключить модуль SysUtils, который попытается преобразовать код ошибки в ИС какого-либо класса. Может быть, ИС будет более информативна.

P.S.: есть ведь всезнающий Google. Если он ничего не выдает, значит Вы не так спрашиваете. Код чей, свой или скопированный?
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #4  
Старый 31.08.2015, 18:01
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Kailon
Код чей, свой или скопированный?
Спасибо что откликнулись.
Скопирован.
И так же читал на сайте микрософта. там не совсем понятно что делать при завершение работы + язык С.
Пишу с телефона. Ссылку не могу дать. Комп пришлось разобрать.
И ещё, если использовать библиотеку bass.DLL (динамическая загрузка), при её наличие в папке с проектом - все нормально. Если удаль её, при завершение работы - error 216.
Ответить с цитированием
  #5  
Старый 01.09.2015, 09:03
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У автослесарюг есть такое правило: открутил гайку - помни, её потом ещё и закручивать, в смысле что-то создаёте, а убивать забываете

Насчёт динамической загрузки, если ошибка вылетает, значит у вас библиотика всёже статикой подрубается, покажите код пжлст
Ответить с цитированием
  #6  
Старый 01.09.2015, 10:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

реализовал свой вариант, все работает отлично, никаких ошибок в конце не возникает
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 12.11.2015, 19:40
Аватар для Stalker2-42
Stalker2-42 Stalker2-42 вне форума
Новичок
 
Регистрация: 28.09.2013
Сообщения: 94
Версия Delphi: 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
У автослесарюг есть такое правило: открутил гайку - помни, её потом ещё и закручивать, в смысле что-то создаёте, а убивать забываете

Насчёт динамической загрузки, если ошибка вылетает, значит у вас библиотика всёже статикой подрубается, покажите код пжлст


Здравствуйте.

В справке я так и не понял как "убивать".

Код в архиве вместе с DLL(Динам. загрузка). https://yadi.sk/d/jB76xkAJkQzQ9

Цитата:
Сообщение от NumLock

На VCL и уменя работает, а на API нет.

Последний раз редактировалось Stalker2-42, 12.11.2015 в 20:43.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025