Привет!
Пытаюсь сделать окно поверх всего, которое при клике не берет на себя фокус. Отображаться оно отображается, а вот с фокусом проблема:
"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.