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!