![]() |
Re: Übersetzung Class MagneticWindow
Hallo,
eine grundsätzliche Anmerkung habe ich noch. Du benutzt reichlich kryptische Variablennamen (m_uWndInfo ist so ein Beispiel). Wenn Du auch nach zwei Wochen noch verstehen willst, was Dein Programm macht, dann solltest Du Dir vielleicht aussagekräftigere Namen ausdenken. Diese sind dann automatisch Teil der Dokumentation des Programms, d. h. der Quellcode wird selbstbeschreibend. Und Unterstriche in Variablennamen sind in Delphi sowieso verpönt. Übrigens können wir Dir auch besser helfen, wenn wir verstehen, was Du da schreibst :wink: . Hilfreich ist möglicherweise der ![]() Gruß xaromz |
Re: Übersetzung Class MagneticWindow
Wieso kryptisch? Ich habe (intuitiv) seine Variablen so verstanden:
- Wenn es ein Klassenmember ist, dann kommt vorne ein "m_" als Präfix vor. - Dann folgt der Typ. So ist ein Boolean in einer Klasse deklariert: m_bXXX, ein Long und nicht als Member: lngXXX Und der Name dahinter gibt den Inhalt an sich an, also die Bedeutung. Der Typ und Deklarationsort sind zuvor definiert. Was ist daran unklar? Ok, das mit dem Unterstrich. Grundlegend könnte ich an seinen bisherigen Benennungen nichts wirklich schlechtes vorwerfen - da gibt es genug andere Beispiel wo gar nichts in der Richtung gesagt wird. |
Re: Übersetzung Class MagneticWindow
Zitat:
Ich konnte im ersten moment die argumentation wegen der benennung auch nicht nachvollziehen. @xaromz Habe aber nichts gegen einzuwenden ihn auf den Pascal Style zu konvertieren. das könnte man zum schluss erledigen, wenn es komplett durchgelaufen ist. gruß |
Re: Übersetzung Class MagneticWindow
Also so:
Delphi-Quellcode:
Gutes argument.
// Add info
m_uWndInfo[m_lWndCount -1].hwnd := Handle; m_uWndInfo[m_lWndCount -1].hWndParent := hWndParent; Werde es ändern. ;) Das verändern der Variablen(Namen) möchte ich erst in angriff wenn der erste Durchlauf mal erfolgreich war. Gruß |
Re: Übersetzung Class MagneticWindow
Altes aber dennoch neues Problem.
Gerate bei der Übergabe einer neuen SnapWidth in eine Endlosschleife. Kann also irgendetwas mit der Property SnapWidth noch nicht stimmen. Habe beide Varianten versucht.
Delphi-Quellcode:
property SnapWidth: Integer read FSnapWidth write SetSnapWidth;
Delphi-Quellcode:
Die eine verursacht eine endlosschleife, die andere einen AV.
property SnapWidth: Integer read GetSnapWidth write SetSnapWidth;
Hat sich erledigt! gruß |
Re: Übersetzung Class MagneticWindow
Original
Code:
Übersetzt.
'Convert the string from hex pairs to bytes and store in the machine code buffer
i = 1 Do While j < CODE_LEN j = j + 1 sc_aBuf(j) = CByte("&H" & Mid$(sSubCode, i, 2)) 'Convert a pair of hex characters to an eight-bit value and store in the static code buffer array i = i + 2 Loop 'Next pair of hex characters
Delphi-Quellcode:
//Convert the string from hex pairs to bytes and store in the machine code buffer
i := 1; While j < CODE_LEN Do inc(j); sc_aBuf[j] := byte(MidStr('$' + sSubCode, i, 2)); //Convert a pair of hex characters to an //eight-bit value and store in the static code buffer array i := i + 2;
Delphi-Quellcode:
Fehler!
function MidStr(Const Str: String; From, Size: Word): String;
begin MidStr := Copy(Str, From, Size) end; Zitat:
gruß |
Re: Übersetzung Class MagneticWindow
1. wieder Result
2. Mit StrToInt() kannst du Zahlen in hexadezimaler Schreibweise konvertieren, wenn diese mit einer "$" eingeleitet werden. Sonst würde er sie in dezimaler Schreibweise konvertieren.. |
Re: Übersetzung Class MagneticWindow
Zitat:
Delphi-Quellcode:
Ist gewohnheit muss mich dran gewöhnen das die rückgabe .. Result ist. :)
function MidStr(Const Str: String; From, Size: Word): String;
begin Result := Copy(Str, From, Size) end;
Delphi-Quellcode:
Wie oben schneidet er mit einen Wert vom string ab
sc_aBuf : array [1..CODE_LEN] of Byte;
sc_aBuf[j] := Byte(StrToInt(MidStr('$' + sSubCode, i, 2))); Sollte '$55' sein gibt aber '$5' aus .AV sc_aBuf[j] ist ein Array of byte. So funktioniert das nicht. :( gruß |
Re: Übersetzung Class MagneticWindow
Geht jetzt!
Waren ein paar probleme mit der Schleife.
Delphi-Quellcode:
gruß
//Convert the string from hex pairs to bytes and store in the machine code buffer
i := 1; j := 0; While j < CODE_LEN Do begin inc(j); sc_aBuf[j] := Byte(StrToInt('$' + MidStr(sSubCode, i, 2))); //Convert a pair of hex characters to an //eight-bit value and store in the static code buffer array i := i + 2; end; |
Re: Übersetzung Class MagneticWindow
Habe die aktuelle Version noch mal hochgeladen.
Fehlte noch eine 'end else' abfrage in Subclass_Start. Jetzt wird es mal wieder schwierig.
Delphi-Quellcode:
PATCH_0A = 186; //Address of the owner object
Delphi-Quellcode:
VarPtr ??? , ObjPtr ???
zPatchVal(VarPtr(sc_aBuf(1)), PATCH_0A, ObjPtr(Me))
und
Delphi-Quellcode:
RtlMoveMemory ???
procedure TMagnetic.zPatchVal(nAddr: Integer; nOffset: Integer; nValue: Integer);
//Patch the machine code buffer at the indicated offset with the passed value begin RtlMoveMemory(nAddr + nOffset, nValue, 4); End; Edit: Scheint das gleiche wie CopyMemory zu sein!
Code:
gruß
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (xDest As Any, xSource As Any, ByVal nbytes As Long)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:17 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