Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Cursornamen Bestimmen (https://www.delphipraxis.net/139669-cursornamen-bestimmen.html)

stiftII 2. Sep 2009 19:56

Re: Cursornamen Bestimmen
 
Danke, werds mal probieren.

Uff..
Warum geht das hier nicht :( =

Delphi-Quellcode:
   
  for i:=0 to high(Screen.Cursors) do
  begin
    // vergleichen
  end;
//EDIT:
Es muss nicht unbedingt der Name sein, hauptsache der cursor wird einwandfrei identifiziert :).

stiftII 2. Sep 2009 22:53

Re: Cursornamen Bestimmen
 
Hallo nochmal.

Ich habe nun eine Für mich ausreichende Lösung gefunden aber stehe nun vor einem Neuen Problem.

Ich habe diese Library erstellt, sie soll die Mauscursor als Grafik zurückgeben, bekomme allerdings den Fehler "[Error] causeddll2.dpr(25): Object or class type required" In der markierten Zeile (testbmp := TBitmap.Create;);

Delphi-Quellcode:
library causeddll2;

uses
  Messages, Variants, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls,
  Graphics,
  SysUtils,
  Classes,
  Windows,
  FastShareMem;

{$R *.res}

type
  TForm1 = class(TForm)
  end;

function GetCursorBitmap:TBitmap; stdcall;
var
  info: TCursorInfo;
  ico: TIcon;
  testbmp : TBitmap;
begin

[color=#ff005f][b]   testbmp := TBitmap.Create;[/b][/color]

   info.cbSize := SizeOf(info);
  GetCursorInfo(info);

    ico := TIcon.Create;
  try
    ico.Handle := info.hCursor;
    testbmp.Width := ico.Width;
    testbmp.Height := ico.Height;
    testbmp.Canvas.Draw(0, 0, ico);

    result:= testbmp;
  finally
    ico.Free;
  end;

end;



function GetFunctionCount(): Integer; stdcall; export;
begin
  Result:= 1;
end;

function GetFunctionInfo(x: Integer; var ProcAddr: Pointer; var ProcDef: PChar): Integer; stdcall;
begin
  case x of
    0:
      begin
        ProcAddr := @GetCursorBitmap;
        StrPCopy(ProcDef, 'function GetCursorBitmap(): TBitmap;');
      end;
  else
    x := -1;
  end;
  Result := x;
end;

exports GetFunctionCount;
exports GetFunctionInfo;

end.

jfheins 2. Sep 2009 22:56

Re: Cursornamen Bestimmen
 
iirc ist TBitmap auch in der Unit windows vorhanden. Lösung: in der uses Liste windfows an den anfang und vor classes/graphics/(wo auch immer das richtige tbitmap drin ist)

stiftII 2. Sep 2009 23:03

Re: Cursornamen Bestimmen
 
Oh, super. Vielen Dank.

Hat geklappt :)

~ stiftII

Luckie 2. Sep 2009 23:31

Re: Cursornamen Bestimmen
 
Zitat:

Zitat von stiftII
stehe nun vor einem Neuen Problem.

Dann erstelle beim nächsten mal bitte auch einen neuen Thread.

stiftII 3. Sep 2009 11:34

Re: Cursornamen Bestimmen
 
Zitat:

Zitat von Luckie
Zitat:

Zitat von stiftII
stehe nun vor einem Neuen Problem.

Dann erstelle beim nächsten mal bitte auch einen neuen Thread.

Wird gemacht.

Dachte nur, dass es noch immer zum Thema passen würde ;)

Sherlock 21. Mär 2013 09:37

AW: Cursornamen Bestimmen
 
Ich hänge mich hier mal dran.
Im Zuge der Suche nach einer Alternative zu http://www.delphipraxis.net/1207959-post1.html versuche ich das Handling mehr oder weniger selbst zu erledigen. Da ich das nur auf besagte Groupboxen anwenden möchte, sollte es recht einfach sein.
Ich habe also inspiriert durch diesen Thread versucht festzustellen, wann der Cursor crHelp ist (also der Pfeil mit Fragezeichen):
Delphi-Quellcode:
  myCurInfo.cbSize := SizeOf(tagCursorInfo);
  GetCursorInfo(myCurInfo);
  i := 0;
  repeat
    if Screen.Cursors[i] = myCurInfo.hCursor then // -> immer gleich egal welchen Wert i hat...gibt ja auch nur einen Mauspfeil
    begin
      if CursorToString(Screen.Cursors) = CursorToString(crHelp) then // -> nie gleich, vermutlich nennt VCL die Dinger halt anders
        i := Screen.CursorCount + 10  // Jajaja...
      else
        Inc(i);
    end
    else
      Inc(i);
  until i >= Screen.CursorCount; //CursorCount ist bei mir mit 4 recht klein...bedenkt man das es mindestens 10 verschiedene
                                  //System-Mauspfeile gibt.
Ich habe dann zwar das Handle des System-Cursors...aber ich komme ums verrecken nicht auf einen gescheiten Vergleich, um das Aussehen des Cursors festzustellen.
Hülfe?

Sherlock

Sherlock 22. Mär 2013 09:18

AW: Cursornamen Bestimmen
 
Sodele habs erledigt. Da jegliche Abfrage des Cursors (ScreenCursors, GetCursorInfo, Control.Cursor, etc...) ums Verrecken nicht das korrekte Ergebnis liefert, scheint es sich an dieser Stelle um etwas ganz anderes zu handeln. Workaround ist zu ermitteln, ob denn das BorderIcon geklickt wurde, und das geht lächerlich einfach:
Delphi-Quellcode:
TMeinDialog = class(TForm)
.
.
.
private
    biHelpClicked: Boolean;
    procedure wmNCLButtonDown(var Msg: TWMNCLButtonDown); message WM_NCLBUTTONDOWN;
    procedure wmNCLButtonUp(var Msg: TWMNCLButtonUp); message WM_NCLBUTTONUP;
.
.
.
procedure TMeinDialog.wmNCLButtonDown(var Msg: TWMNCLButtonDown);
begin
  if Msg.HitTest = HTHELP then
  begin
    biHelpClicked := True;
  end;
  inherited;
end;

procedure TMeinDialog.wmNCLButtonUp(var Msg: TWMNCLButtonUp);
begin
  if Msg.HitTest = HTHELP then
  begin
    biHelpClicked := True;
  end;
  inherited;
end;
Im ClickEreignis eines jeden Controls kann nun auf biHelpClicked geprüft und entsprechend reagiert werden.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz