Einzelnen Beitrag anzeigen

Benutzerbild von t2000
t2000

Registriert seit: 16. Dez 2005
Ort: NRW
212 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: VCL-Styles bei Delphi 10.4

  Alt 20. Feb 2021, 12:56
Ich häng mich hier mal dran.
Ich habe einen fast identischen Fehler.

Beim Setzen des Styles eine Exception. Aber das genaue Umfeld ist jetzt hier nicht so wichtig.
Abstürzen tut das Programm an dieser Stelle in der Datei ...21.0\source\vcl\StyleAPI.inc Zeile 10948

neuste Version: Delphi 10.4.1 inkl. Patches

Dort ist eine solche Abfrage:

if StyleObject <> nil then
begin
... mach was
end
else
StyleObject.Draw( ...) !!! Das Objekt ist doch NIL !!

Hier der Original Sourcecode

Delphi-Quellcode:
  if StyleObject <> nil then
  begin
    StyleObject.Active := kwdsActive in AWindow.State;
    StyleObject.BoundsRect := AWindow.Rect;
    if (ADPI > DPI_DEFAULT) and (AObject = 'Title') then
    begin
      StyleObject := StyleObject.FindObjectByName('Image');
      if StyleObject <> nil then
      begin
        StyleObject := StyleObject.FindObjectByName('Title');
        if StyleObject <> nil then
        begin
          R := StyleObject.BoundsRect;
          R.Bottom := MulDiv(AWindow.ClipRect.Bottom, ADPI, DPI_DEFAULT);
          SaveBoundsRect := StyleObject.BoundsRect;
          StyleObject.BoundsRect := R;
          StyleObject.FStopDrawChilds := True;
          if (StyleObject.MarginLeft + StyleObject.MarginRight = 0) or
             (StyleObject.MarginTop + StyleObject.MarginBottom = 0) then
          begin
            Buffer := TBitmap.Create;
            try
              Buffer.SetSize(R.Width, AWindow.ClipRect.Height);
              R := Rect(0, 0, Buffer.Width, Buffer.Height);
              StyleObject.BoundsRect := R;
              StyleObject.Draw(Buffer.Canvas, R);
              R := AWindow.ClipRect;
              R.Bottom := MulDiv(R.Bottom, ADPI, DPI_DEFAULT);
              DrawStretchBitmap(Buffer, Canvas, R);
            finally
              Buffer.Free;
            end;
          end
          else
            StyleObject.Draw(Canvas, R, ADPI);
          StyleObject.FStopDrawChilds := False;
          StyleObject.BoundsRect := SaveBoundsRect;
        end
        else
          StyleObject.Draw(Canvas, AWindow.ClipRect, ADPI); // Hier der Absturz. Bzw. steht hier der Cursor bei der Exception, wenn ich "Anhalten" drücke. StyleObject = nil
      end
      else
        StyleObject.Draw(Canvas, AWindow.ClipRect, ADPI);
    end
    else
      StyleObject.Draw(Canvas, AWindow.ClipRect, ADPI);
  end;
Hab ich gerade einen Aussetzer oder läuft hier was falsch.
Es ist ja nicht nur eine Stelle im Sourcecode, die genau so geschrieben ist.

.
Thomas
(Wir suchen eine(n) Entwickler(in) mit Ambitionen später ggf. die Softwarefirma zu leiten)
Aktuell nicht mehr. Aber ab vielleicht 2024/2025 wird das wieder sehr interessant!
  Mit Zitat antworten Zitat