AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Cursornamen Bestimmen

Ein Thema von stiftII · begonnen am 2. Sep 2009 · letzter Beitrag vom 22. Mär 2013
Antwort Antwort
Seite 2 von 2     12   
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#11

Re: Cursornamen Bestimmen

  Alt 2. Sep 2009, 19:56
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 .
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#12

Re: Cursornamen Bestimmen

  Alt 2. Sep 2009, 22:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: Cursornamen Bestimmen

  Alt 2. Sep 2009, 22:56
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)
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#14

Re: Cursornamen Bestimmen

  Alt 2. Sep 2009, 23:03
Oh, super. Vielen Dank.

Hat geklappt

~ stiftII
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#15

Re: Cursornamen Bestimmen

  Alt 2. Sep 2009, 23:31
Zitat von stiftII:
stehe nun vor einem Neuen Problem.
Dann erstelle beim nächsten mal bitte auch einen neuen Thread.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
stiftII

Registriert seit: 2. Sep 2009
Ort: Cuxhaven
122 Beiträge
 
#16

Re: Cursornamen Bestimmen

  Alt 3. Sep 2009, 11:34
Zitat von Luckie:
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
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Cursornamen Bestimmen

  Alt 21. Mär 2013, 09:37
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.763 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Cursornamen Bestimmen

  Alt 22. Mär 2013, 09:18
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
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:47 Uhr.
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