Einzelnen Beitrag anzeigen

venice2
(Gast)

n/a Beiträge
 
#1

Zu viele Parameter bei SizeOf

  Alt 19. Okt 2021, 19:24
Ich will meine GDIPClock auf 64 Bit umlegen.
Soweit geht alles bis auf diese Probleme.

Das erste!
Delphi-Quellcode:
procedure SetTrayIcon(hWnd: hWnd; IconID: Integer; TipMsg: PChar;
  Update: Boolean);
begin
  with NIconD do
  begin
    cbSize := SizeOf(TNotifyIconData); // funktioniert unter 32 Bit
    uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
    uCallbackMessage := WM_TRAYEVENT;
    uID := $0815;
    hIcon := LoadIcon(hInstance, MAKEINTRESOURCE(IconID));
    lStrCpy(szTip, TipMsg);
    Wnd := hWnd;
  end;

  if not Update then
    Shell_NotifyIcon(NIM_ADD, @NIconD)
  else
    Shell_NotifyIcon(NIM_MODIFY, @NIconD);

end;
cbSize := SizeOf(TNotifyIconData); // funktioniert nicht mehr unter 64 Bit
erzählt mir immer etwas von
Zitat:
[dcc64 Fehler] ClockUnit.pas(249): E2034 Zu viele Parameter
Bei SizeOf..
Unter 64 Bit springt er hier rein. (ShellAPI) bei der Suche der Declaration.
Delphi-Quellcode:
  _NOTIFYICONDATAW = record
  private
    class constructor Create;
  public
    class function SizeOf: Integer; static;
  public
    cbSize: DWORD;
anstelle SizeOf von System zu verwenden.. Was soll der Blödsinn?
Gebe ich System.SizeOf(TNotifyIconData); an gibt es keinen Fehler aber ein Icon wird auch nicht erstellt.

Das Zweite
Delphi-Quellcode:
  if Msg.Msg = WM_SizeAdj then
  begin
    ScaleFactor := Msg.WParam / 100;
    Timer1Timer(Self);
  end;
ScaleFactor ist innerhalb des implementation Teil als
  ScaleFactor: double = 0.7; und in der class TAdjustForm
Delphi-Quellcode:
    public
    { Public declarations }
     MainHandle : HWND;
     Transparency : integer;
     ScaleFactor: Double; // hier
     procedure ApplyLocalLanguage;
  end;
definiert.
jetzt mault er mir beim Kompilieren rum
Zitat:
[dcc64 Fehler] ClockUnit.pas(646): E2129 Einer Nur-Lesen Eigenschaft kann kein Wert zugewiesen werden
Ich denke der Compiler verwendet dann die Funktion ScaleFactor aus VCL.Controls

Keine Ahnung was das alles wieder soll.
Kann man nicht mal einfache Variablen übergeben ohne das die VCL dazwischen Funkt? Oder diese für sich reserviert?
Einer der Dinge warum ich damit nicht gerne arbeite.
Die Uses!
Delphi-Quellcode:
uses
  Winapi.Windows,
  Winapi.Messages,
  Winapi.ShellAPI,
  System.Win.Registry,
  System.UITypes,
  System.SysUtils,
  System.Classes,
  System.Math,
  VCL.Graphics,
  VCL.Forms,
  VCL.Controls,
  VCL.Dialogs,
  VCL.ExtCtrls,
  VCL.Menus,
  VCL.AppEvnts,
  uGDIUnit, uAARotateFast, uGlobal;
EDIT:
OK geht jetzt.
Habe den ScaleFactor von Global in die Classe TClockForm verschoben und die Default Value in FormCreate zugewiesen.
System.SizeOf(TNotifyIconData) geht jetzt auch habe meine Ressourcen Datei dafür angepaßt. Icon wird jetzt angezeigt.

Trotzdem Müll das sich die VCL überall reinhängt.
Wenn man Variablen nicht verwenden darf warum kennzeichnet man diese nicht einfach?
Die haben mir meine "ScaleFactor" Variable geklaut und unter Controls eingefügt. Frechheit ist das!

Geändert von venice2 (19. Okt 2021 um 20:22 Uhr)
  Mit Zitat antworten Zitat