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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2016, 01:05   #1
delphinewbie
Новичок
Джуниор
 
Регистрация: 23.01.2016
Сообщений: 2
По умолчанию SetWindowLong + WS_EX_NOACTIVATE

Привет!

Пытаюсь сделать окно поверх всего, которое при клике не берет на себя фокус. Отображаться оно отображается, а вот с фокусом проблема:
"Access violation at address 0. Read of address 0" для SetWindowLong(Frm.Handle, -16, GetWindowLong(Frm.Handle, -16) + 134217728);

Скорее всего я накосячил с синтаксисом, но сам разобраться я не смогу потому что знаком с делфи второй день
А код такой стремный потому что запускается не в среде разработки, а через стороннюю программу в которую вшит компилятор, ну и потому что я нуб xD

PHP код:
uses SysUtilsStdCtrlsControlsFormsDialogsVariantsClasses;

var 
Frm   TForm;
    
//Events: TEvents;
    
cbCelestial:TCheckBox;
    function 
SetWindowPos(hWndhWndInsertAfterTHandleXYcxcyIntegeruFlagsinteger): BOOLeanstdcallexternal 'user32.dll';
    function 
SetTimer(hWndTHandlenIDEventuElapseintegerlpTimerFuncPointer): integerstdcallexternal 'user32.dll';
    function 
SetWindowLong(hWndTHandlenIndexintegerdwNewLonginteger): integerstdcallexternal 'user32.dll';
    function 
GetWindowLong(hWndTHandlenIndexinteger): integerstdcallexternal 'user32.dll';
    
    
procedure MainProc;
begin
  
//Events := TEvents.Create;

  
Frm  := TForm.Create(nil);
  
Frm.Caption := 'Cardinal';
  
Frm.BorderStyle := bsDialog;
  
//Frm.Position := poScreenCenter;
  
Frm.FormStyle := fsStayOnTop;
  
Frm.Height := 340;
  
Frm.Width := 130;
  
//Frm.Top := Screen.Height + Frm.Height;
  //Frm.Left := Screen.Width - Frm.Width;
  //Frm.OnClose := Events.OnClose;
  
frm.bringtoFront;
  
cbCelestial := TCheckBox.Create(Frm);
  
cbCelestial.left := 10;
  
cbCelestial.top := 5;
  
cbCelestial.Caption := 'Celestial Protect';
  
cbCelestial.Parent  := Frm;
  
//Frm.Left:= Screen.WorkAreaWidth-Frm.Width;
  //Frm.Top:= Screen.WorkAreaHeight-Frm.Height;
  
SetWindowLong(Frm.Handle, -16GetWindowLong(Frm.Handle, -16) + 134217728);
  
Frm.Show;
  
SetTimer(01500, @setwinpos);
end;

procedure setwinpos;
begin
SetWindowPos
(Frm.Handle, -10000or or 16);
end;

begin
MainProc
();
end
delphinewbie вне форума Ответить с цитированием
Старый 23.01.2016, 01:44   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А код такой стремный потому что запускается не в среде разработки, а через стороннюю программу в которую вшит компилятор, ну и потому что я нуб xD
Перестань так делать! Для локализации ошибок доступа к памяти нужен дебаггер.
Если ты 2-й день пытаешься что-то сделать - не лезь на форумы, а почитай книжку. Чтобы писать программы с API-функциями в своём коде, нужно, как минимум, понимать, что ты делаешь.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 23.01.2016, 02:03   #3
delphinewbie
Новичок
Джуниор
 
Регистрация: 23.01.2016
Сообщений: 2
По умолчанию

У меня пока нет желания изучать делфи, но есть задача которую нужно решить. Гугл я уже успел изнасиловать запросами во всех возможных позах, но SetWindowLong так и не завелся. Я подумал, что хорошей идеей будет спросить на форуме опытных программистов, для которых подправить 1 строку - сущий пустяк. Если я ошибся форумом - так и скажите.
delphinewbie вне форума Ответить с цитированием
Старый 23.01.2016, 02:06   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
У меня пока нет желания изучать делфи
Дальше не читал.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблемы с WS_EX_NOACTIVATE bro Общие вопросы Delphi 3 23.10.2018 20:33
Не работает WS_EX_NOACTIVATE laboart Общие вопросы Delphi 0 26.02.2012 16:13
Обычный класс и SetWindowLong Alexoid Общие вопросы C/C++ 1 14.01.2011 08:21
GetWindowLong и SetWindowLong Coyot Помощь студентам 0 04.12.2010 14:03
Вопрос про SetWindowLong() yngwie Win Api 2 03.04.2009 11:55