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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2016, 00:54
delphinewbie delphinewbie вне форума
Прохожий
 
Регистрация: 23.01.2016
Сообщения: 1
Версия Delphi: Delphi 10
Репутация: 10
По умолчанию SetWindowLong + WS_EX_NOACTIVATE

Привет!

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

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

Код:
uses SysUtils, StdCtrls, Controls, Forms, Dialogs, Variants, Classes;

var Frm   : TForm;
    //Events: TEvents;
    cbCelestial:TCheckBox;
    function SetWindowPos(hWnd, hWndInsertAfter: THandle; X, Y, cx, cy: Integer; uFlags: integer): BOOLean; stdcall; external 'user32.dll';
    function SetTimer(hWnd: THandle; nIDEvent, uElapse: integer; lpTimerFunc: Pointer): integer; stdcall; external 'user32.dll';
    function SetWindowLong(hWnd: THandle; nIndex: integer; dwNewLong: integer): integer; stdcall; external 'user32.dll';
    function GetWindowLong(hWnd: THandle; nIndex: integer): integer; stdcall; external '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 := 'Cheked?';
  cbCelestial.Parent  := Frm;
  //Frm.Left:= Screen.WorkAreaWidth-Frm.Width;
  //Frm.Top:= Screen.WorkAreaHeight-Frm.Height;
  SetWindowLong(Frm.Handle, -16, GetWindowLong(Frm.Handle, -16) + 134217728);
  Frm.Show;
  SetTimer(0, 1, 500, @setwinpos);
end;

procedure setwinpos;
begin
SetWindowPos(Frm.Handle, -1, 0, 0, 0, 0, 1 or 2 or 16);
end;

begin
MainProc();
end.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter