GetDC(Form1->Handle) von WIN7 zu WIN XP nicht = ?



  • DPI Skalierung ist bei allen Systemen auf 96DPI (100%)

    Scaled Eigenschaft ist false

    Form BorderStyle auf bsNone gesetzt, test bringt wieder ein Versatz des TRects Left+1 und Top+1.

    Hab jetzt noch ein weiteres WIN 7 Ultimate ausprobiert, Koords und PIC kommt von WIN 7 Home Premium, das gleiche Problem das kann doch nit sein... 😡

    Dazu noch mal als Errinerung, Thema zwei Bildschirme und VMWare Maschine...
    Die tests von mir sind in einer VM mit WIN 7 Home und WIN7 Ultimate gemacht.
    Kumpel hat zwei Bildschirme, mit WIN 8

    Hab jetzt ein alten Lapi ausgepakt mit WIN XP, dort ist der Versatz nicht da, jedoch funktioniert der Bild Vergleich nicht, mach ich die Bilder in Paint auf vergrössere die, sehen die absolut gleich aus...Vielleicht Farbschema in WIN 7/8 zu XP? Kommt jetzt noch dazu 😮

    Das ist so was von unlogisch echt ma... durch dreh...

    Wo ist hier der Wurm drin, wer den findet geb ich ein Essen aus 😉



  • Du erstellst einen neuen Canvas und übergibst den Handle der Form.

    TCanvas* Canvas = new TCanvas(); 
    Canvas->Handle = GetDC(Form1->Handle); 
    ...   
    Image1->Picture->Bitmap->Canvas->CopyRect(Ziel, Canvas, Quelle); 
    ...
    

    Ich könnte mir vorstellen das evtl. die verschiedenen Betriebssysteme evtl. andere "Default" Werte haben und es so zu unterschieden kommt.

    Warum erstellst du ein neues Canvas und verwendest nicht gleich das deiner Form?

    TCanvas* Canvas = Form1->Canvas; 
    ...   
    Image1->Picture->Bitmap->Canvas->CopyRect(Ziel, Canvas, Quelle); 
    ...
    


  • Damit bringt er mir ein ntdll.dll Adress Fehler...

    Aber den Ansatz werd ich heute noch bissl weiter verfolgen, danke.



  • Scalierung schrieb:

    Warum erstellst du ein neues Canvas und verwendest nicht gleich das deiner Form?

    Vermutlich deshalb, weil man das nur im WM_PAINT-Handler verwenden darf.



  • audacia schrieb:

    Scalierung schrieb:

    Warum erstellst du ein neues Canvas und verwendest nicht gleich das deiner Form?

    Vermutlich deshalb, weil man das nur im WM_PAINT-Handler verwenden darf.

    Also

    Form1->Canvas
    

    rein zeichnen ja raus nein...
    Übrigens

    GetWindowDC
    

    für mehrere Monitore brings auch nicht...



  • Also das man Canvas nur im WM_PAINT verwenden darf wär mir neu.

    http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Graphics_TCanvas_CopyRect.html

    Ich glaub du hast noch einen Fehler in

    bmp1->Canvas->CopyRect(bmp1->Canvas->ClipRect, Canvas, Quelle);
    

    Ich kann mir nicht vorstellen das deine Zielposition auf der Form wirklich bmp1->Canvas->ClipRect sein soll.



  • In den beiden Zeilen hier wird der Form doch was zugewiesen, nicht entnommen... oder sehe ich das falsch...

    Form1->Canvas->BrushCopy(MyRect, Bitmap.get(), MyRect, clBlack);
      Form1->Canvas->CopyRect(MyOther, Bitmap->Canvas, MyRect);
    

    Der ntdll.dll Fehler kommt ja nicht mal zu der Code Zeile mit ClipRect, der kommt schon bei der Aufnahme der Bilder und Koords...

    Die Funktion an sich funktionier ja, wenn ich auf den anderen Systemen eine neue Koordinaten&Bild Aufnahme mache und diese dann abrufe läufts.
    Doch ist doch nicht der Sinn der Sache Koordinaten und Bilder für zich verschiedene Systeme zu hinterlegen, hab ja nicht alle und müsste zu den leuten die sie haben...

    bin auch felsenfest davon überzeugt das hier Default System unterschide gibt, habe schon versucht die user32.dll und gdi32dll mitzuliefern von WIN XP die Version. Doch auch nicht die Lösung.

    Hab ja schon mal gefragt wie bringe ich die Default werte im Programm mit, die die Standart Werte nur im Programm System übergreifend ignorieren?

    Doch zu erst müsste der Grundsätzliche Unterschied erst mal erkannt werden, meiner seits ist der mir nicht klar.

    Zwei dinge sind insofern kla, die Koordinaten fallen in den Unterschied hinein und neuergings (anscheinend) der Farbdastellungs Unterschied zu WIN XP(erst mal zweit drangig).

    Was ist der Grund dieser Koordinaten unterschiede? kann doch nur aus der Rechnung von Screen und TRect kommen... oder sehe ich das falsch?



  • Scalierung schrieb:

    Also das man Canvas nur im WM_PAINT verwenden darf wär mir neu.

    Stimmt, das ist Quatsch. Ich dachte, daß TControlCanvas intern BeginPaint() benutzt, aber es verwendet GetDC() , und das geht auch außerhalb von WM_PAINT.



  • OK das problem liegt wohl an IE Verions Unterschied von 8 zu 9<
    Für XP gibts nur den 8ter!?

    Der TWebBrowser verwendet die ActiveX Componente des IE's bei der Ver. 8 hat der Browser dann ein Border von 4Pixel, in den neueren nur 2Pixel. http://blogs.msdn.com/b/ie/archive/2010/08/23/making-sites-look-their-best-in-standards-mode.aspx

    So wie es aussieht bleibt nur die ActiveX Componente von Mozilla zu verwenden http://www.iol.ie/~locka/mozilla/control.htm oder das Programm in Delphi zu schreiben wo man die Borders ausschalten kann. (Was ich so über google an Infos raus hab)

    Oder weiss hierzu jemand noch eine andere Möglichkeit?

    Schon mal Danke an die Hilfe, hätte das vielleicht noch mit dem WebBrowser erwähnen sollen 🙄

    Wünsche ein schönes WE!



  • WebBrowser Wie Was Wo ....

    Was hat dass mit den ganzen was du uns gezeigt zu tun?

    Ich bin konfuse!



  • Scalierung schrieb:

    WebBrowser Wie Was Wo ....

    Was hat dass mit den ganzen was du uns gezeigt zu tun?

    Ich bin konfuse!

    Die Bilder werden im Browser dagestellt und da das der IE mit seinem Layout ist den der TWebBrowser benutzt als AxtiveX Komponente, kommt daher auch der unterschied zu der Positionierung der Bilder.

    Weil die Version 8 ein anderen Border hat als der 11ver, sind die Bilder immer versetzt gewesen.


Anmelden zum Antworten