![]() |
Zu viele Parameter bei SizeOf
Ich will meine GDIPClock auf 64 Bit umlegen.
Soweit geht alles bis auf diese Probleme. Das erste!
Delphi-Quellcode:
cbSize := SizeOf(TNotifyIconData); // funktioniert nicht mehr unter 64 Bit
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; erzählt mir immer etwas von Zitat:
Unter 64 Bit springt er hier rein. (ShellAPI) bei der Suche der Declaration.
Delphi-Quellcode:
anstelle SizeOf von System zu verwenden.. Was soll der Blödsinn?
_NOTIFYICONDATAW = record
private class constructor Create; public class function SizeOf: Integer; static; public cbSize: DWORD; Gebe ich System.SizeOf(TNotifyIconData); an gibt es keinen Fehler aber ein Icon wird auch nicht erstellt. Das Zweite
Delphi-Quellcode:
ScaleFactor ist innerhalb des implementation Teil als
if Msg.Msg = WM_SizeAdj then
begin ScaleFactor := Msg.WParam / 100; Timer1Timer(Self); end;
Delphi-Quellcode:
und in der class TAdjustForm
ScaleFactor: double = 0.7;
Delphi-Quellcode:
definiert.
public
{ Public declarations } MainHandle : HWND; Transparency : integer; ScaleFactor: Double; // hier procedure ApplyLocalLanguage; end; jetzt mault er mir beim Kompilieren rum Zitat:
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:
EDIT:
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; 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? :stupid: Die haben mir meine "ScaleFactor" Variable geklaut und unter Controls eingefügt. Frechheit ist das! |
AW: Zu viele Parameter bei SizeOf
Zitat:
|
AW: Zu viele Parameter bei SizeOf
Zitat:
Diesbezüglich wurden mir nie Probleme gemeldet. |
AW: Zu viele Parameter bei SizeOf
Hmm..
Zitat:
Dir ist bewust, dass Du dieses Problem selber verursachst hast?
Delphi-Quellcode:
Durch das WITH wird nunmal das 'SizeOf' von 'NIconD' verwendet und nicht das von System...
with NIconD do
begin cbSize := SizeOf(TNotifyIconData); // funktioniert unter 32 Bit Wenn diese Abweichen, dann wird gemeckert..... Deshalb: Ein grundsätliche Regel (welche von vielen empfohlen wird): KEIN 'WITH' verwenden! ;) |
AW: Zu viele Parameter bei SizeOf
Zitat:
Mein Einwand aber dazu warum wird unter 32Bit, selber Code, dann nicht gemeckert? Das widerspricht sich doch alles. Aber danke habe es geändert waren nur 2 im ganzen Code Zitat:
|
AW: Zu viele Parameter bei SizeOf
Zitat:
Wohin springt er denn bei der Suche nach der Declaration für Win32? Folgendes kompiliert in Delphi 10.4 unter Debug-Wind32 NICHT:
Delphi-Quellcode:
program Project6;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, Winapi.ShellAPI; var NIconD: TNotifyIconData; begin try with NIconD do begin cbSize := SizeOf(TNotifyIconData); // [dcc32 Error] Project6.dpr(19): E2034 Too many actual parameters end; except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; en |
AW: Zu viele Parameter bei SizeOf
Zitat:
Dort verwendet er mit With die System Unit und nicht die ShellAPI. ![]()
Delphi-Quellcode:
D2010 nicht gleich Delphi 10.4
program Project6;
{$APPTYPE CONSOLE} uses SysUtils, ShellAPI; var NIconD: TNotifyIconData; begin try try with NIconD do begin cbSize := SizeOf(TNotifyIconData); //Kompiliert end; except on E: Exception do Writeln(E.ClassName, ' ', E.Message); end; finally Writeln('D2010 - ', 'No error'); end; end. |
AW: Zu viele Parameter bei SizeOf
Hmm..
Zitat:
Denn dort gab es glaube ich noch keine Records mit Funktionen und deshalb auch kein SizeOf im Record... Somit wurde SizeOf von System seitens des Compilers genommen. |
AW: Zu viele Parameter bei SizeOf
Zitat:
Ja ich weiß wir haben Terrabyte zur Verfügung spielt aber keine rolle für mich. Dann ist das wohl geklärt liegt an der jeweiligen Delphi Version. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz