Einzelnen Beitrag anzeigen

DelphiUser123

Registriert seit: 23. Feb 2013
44 Beiträge
 
#7

AW: Eigener Cursor in Firemonkey

  Alt 19. Feb 2025, 14:05
Hallo.
Ich habe mir den Quellcode unter TPlatformWin.SetCursor angeschaut. Wenn ich alles richtig verstanden habe, so muss der neue Cursor in den Listen CustomCursorMap oder CursorMap vorhanden sein.
Es scheint als wäre im CustomCursorMap viel Platz (Nil Werte).

Wie gelingt mir jetzt das Überreichen einer Ressource (mit dem Namen Cursor_1) in einen Char Pointer, aus dem das CustomCursorMap Array besteht?
Nochmals danke für Antworten.

Code:
procedure TPlatformWin.SetCursor(const ACursor: TCursor);
const
  CustomCursorMap: array [crSizeAll .. crNone] of PChar = (
    nil, nil, nil, nil, nil, IDC_SQLWAIT, IDC_MULTIDRAG, nil, nil, IDC_NODROP, IDC_DRAG, nil, nil, nil, nil, nil,
    nil, nil, nil, nil, nil, nil);

  CursorMap: array [crSizeAll .. crNone] of PChar = (
    IDC_SIZEALL, IDC_HAND, IDC_HELP, IDC_APPSTARTING, IDC_NO, nil, nil, IDC_SIZENS, IDC_SIZEWE, nil, nil, IDC_WAIT,
    IDC_UPARROW, IDC_SIZEWE, IDC_SIZENWSE, IDC_SIZENS, IDC_SIZENESW, IDC_SIZEALL, IDC_IBEAM, IDC_CROSS, IDC_ARROW, nil);

  function IsDefaultOrInvalidCursor(const ACursor: TCursor): Boolean;
  begin
    Result := (ACursor = crDefault) or not InRange(ACursor, crSizeAll, crNone);
  end;

var
  NewCursor: HCURSOR;
begin
  if not FDragAndDropActive then
  begin
    // We don't set cursor by default, when we create window. So we should use crArrow cursor by default.
    if IsDefaultOrInvalidCursor(ACursor) and not (csDesigning in Application.ComponentState) then
      FCursor := crArrow
    else
      FCursor := ACursor;

    if InRange(FCursor, crSizeAll, crNone) then
    begin
      if CustomCursorMap[FCursor] <> nil then
        NewCursor := LoadCursorW(HInstance, CustomCursorMap[FCursor])
      else
        NewCursor := LoadCursorW(0, CursorMap[FCursor]);
      Winapi.Windows.SetCursor(NewCursor);
    end;
  end;
end;

function TPlatformWin.GetCursor: TCursor;
begin
  Result := FCursor;
end;

Geändert von DelphiUser123 (19. Feb 2025 um 21:47 Uhr)
  Mit Zitat antworten Zitat