AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Codeoptimierung verursacht probleme

Ein Thema von EWeiss · begonnen am 20. Jan 2017 · letzter Beitrag vom 20. Jan 2017
Antwort Antwort
Seite 3 von 3     123   
EWeiss
(Gast)

n/a Beiträge
 
#21

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 17:40
Zitat:
Emil, sei doch bitte so gut und denke nicht schon drei Schritte weiter
Werde ich tun und habe ich schon gemacht
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:
Hier jetzt mal als minimalstes Beispiel.
Hat auch einen ErangeError keine Ahnung warum. Oder aber
LongWord <> Integer.. das ist bekannt. Aber wie gesagt ich kann das nicht ändern.
GetWindowLong erwartet einen Integer.

gruss

Geändert von EWeiss (20. Jan 2017 um 17:52 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#22

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 17:52
Zitat:
Emil, sei doch bitte so gut und denke nicht schon drei Schritte weiter
Werde ich tun und habe ich schon gemacht
Mit kleinen Änderungen.
Die Änderungen die noch gemacht werden müssen habe ich im vorherigen Post schon mitgeteilt.
Zuviel, zu weit gedacht. Ich schrieb: "denke NICHT schon drei Schritte weiter".


Zitat:
Hier jetzt mal als minimalstes Beispiel.
Hat auch einen ErangeError keine Ahnung warum.
Wenn du das herausfindest und die richtigen Schlüsse daraus ziehst, dann kannst du viele deiner Probleme lösen.

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?
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#23

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 17:53
Zitat:
Zuviel, zu weit gedacht. Ich schrieb: "denke NICHT schon drei Schritte weiter".
Ok Kein Problem.

Zitat:
Wenn du das herausfindest und die richtigen Schlüsse daraus ziehst, dann kannst du viele deiner Probleme lösen.
Kann ich mir denken

Aber nochmal ich benötige den Integer.
Zitat:
Wie groß sind die Wertebereiche von Integer und Cardinal/DWORD/HWND/COLORREF?
4 Byte

Zitat:
Was passiert wenn man ein 250 Gramm Stück Butter durch ein Schlüsselloch drückt?
Ka Ist das Neu?

Wenn du meinst ich soll die Variablen konvertieren. Das hab ich schon
SetProperty(Form1.Handle, Item, Integer(DesktopDeviceContext));
Funktioniert in deinen Beispiel aber nicht bei mir
ok muss den richtigen DatenTyp verwenden dann geht's.

Geändert von EWeiss (20. Jan 2017 um 20:43 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#24

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 20:37
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:
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;
gruss

Geändert von EWeiss (20. Jan 2017 um 20:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 23:02
Was passiert, wenn du die Checks und Neuzuweisungen von M, I und J vor das SetRect ziehst und statt der Felder des Rects, die Variablen direkt anpasst?
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#26

AW: Codeoptimierung verursacht probleme

  Alt 20. Jan 2017, 23:12
Was passiert, wenn du die Checks und Neuzuweisungen von M, I und J vor das SetRect ziehst und statt der Felder des Rects, die Variablen direkt anpasst?
Ich weiß jetzt nicht genau wie du das meinst.
Ganzer Quelltext

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

Geändert von EWeiss (21. Jan 2017 um 09:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz