![]() |
AW: Codeoptimierung verursacht probleme
Zitat:
Mit kleinen Änderungen. Die Änderungen die noch gemacht werden müssen habe ich im vorherigen Post schon mitgeteilt.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} const EXTEND_EXTRA = 56; procedure SetProperty(WinHandle: HWND; Item: integer; V: integer); begin if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then SetWindowLong(WinHandle, (Item - 1) * 4, V); end; function GetProperty(WinHandle: HWND; Item: integer): integer; begin Result := 0; if (Item > 0) and (Item < EXTEND_EXTRA + 1) and (WinHandle <> 0) then Result := GetWindowLongPtr(WinHandle, (Item - 1) * 4); end; procedure Test; var Item: integer; V: integer; DesktopDeviceContext: HDC; I: Integer; begin for I := 0 to 100 do begin Item := 1; DesktopDeviceContext := GetDC(0); SetProperty(Form1.Handle, Item, DesktopDeviceContext); V := GetProperty(Form1.Handle, Item); ReleaseDC(Form1.Handle, DesktopDeviceContext) end; end; procedure TForm1.Button1Click(Sender: TObject); begin Test; end; end. Zitat:
LongWord <> Integer.. das ist bekannt. Aber wie gesagt ich kann das nicht ändern. GetWindowLong erwartet einen Integer. gruss |
AW: Codeoptimierung verursacht probleme
Zitat:
Zitat:
Tipp: Was passiert wenn man ein 250 Gramm Stück Butter durch ein Schlüsselloch drückt? Wie groß sind die Wertebereiche von Integer und Cardinal/DWORD/HWND/COLORREF? |
AW: Codeoptimierung verursacht probleme
Zitat:
Zitat:
Aber nochmal ich benötige den Integer. Zitat:
Zitat:
Wenn du meinst ich soll die Variablen konvertieren. Das hab ich schon
Delphi-Quellcode:
SetProperty(Form1.Handle, Item, Integer(DesktopDeviceContext));
Funktioniert in deinen Beispiel aber nicht bei mir ok muss den richtigen DatenTyp verwenden dann geht's. |
AW: Codeoptimierung verursacht probleme
Der SetRect macht immer noch Probleme.
Deine Bereinigung hat leider nicht funktioniert. Trotzdem Danke für deine Hilfe einiges habe ich nun beheben können. Demnächst lass ich die Bereichsprüfung immer an nachträglich beheben ist schlecht.
Delphi-Quellcode:
var
KlugbenanntesRect: TRect; RectCount: DWORD; ... begin SetRect(KlugbenanntesRect, M, J, I, J + 1); RectCount := pData^.rdh.nCount; if (RectCount > 0) and (RectCount < Length(pr^)) then begin pr^[RectCount] := KlugbenanntesRect; end; end;
Delphi-Quellcode:
gruss
type
TRectArray = array[0..0] of TRect; var pr: ^TRectArray; //--------- if I > M then begin if integer(pData^.rdh.nCount) >= MaxRegions then begin hRgn2 := ExtCreateRegion(nil, sizeof(RGNDATAHEADER) + (sizeof(TRECT) * pData^.rdh.nCount), PRGNDATA(pData)^); if hRgn1 = 0 then begin hRgn1 := hRgn2; end else begin CombineRgn(hRgn1, hRgn1, hRgn2, RGN_OR); skDeleteObject(hRgn2); end; pData^.rdh.nCount := 0; end; pr := @pData^.Buffer; SetRect(pr^[pData^.rdh.nCount], M, J, I, J + 1); //<< macht ärger if M < lpRect.Left then lpRect.Left := M; if I > lpRect.Right then lpRect.Right := I; if J < lpRect.Top then lpRect.Top := J; if J > lpRect.Bottom then lpRect.Bottom := J + 1; Inc(pData^.rdh.nCount); Inc(lpRect); end; |
AW: Codeoptimierung verursacht probleme
Was passiert, wenn du die Checks und Neuzuweisungen von M, I und J vor das
Delphi-Quellcode:
ziehst und statt der Felder des Rects, die Variablen direkt anpasst?
SetRect
|
AW: Codeoptimierung verursacht probleme
Zitat:
![]() Das Problem liegt bei pr^[pData^.rdh.nCount] die anderen Variablem sind korrekt alles Integer. Das ist schon alt hab das nie bemerkt da die BereichsPrüfung aus war. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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