AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Control Resize Bugfix für das WH_CALLWNDPROC Problem
Thema durchsuchen
Ansicht
Themen-Optionen

Control Resize Bugfix für das WH_CALLWNDPROC Problem

Ein Thema von jbg · begonnen am 24. Mai 2008 · letzter Beitrag vom 25. Mai 2008
Antwort Antwort
jbg
Registriert seit: 12. Jun 2002
Und wieder einmal muss ein Bugfix her. Diesmal hat es aber nicht CodeGear verbrochen sondern Microsoft. Der Bug war eigentlich schon immer da, nur fiehl er unter 32 Bit Systemen nicht ganz so sehr auf. Bei 64 Bit Systemen tritt er aber sehr schnell auf. Bestes Beispiel ist die RAD Studio 2007 IDE. Der Editor wird dort nicht richtig eingepasst und hinterlässt einen Bereich den er eigentlich nach einem Resize belegen sollte.

Für die IDE habe ich ja bereits einen Bugfix im IDE FixPack eingebaut. Der taugte aber nicht für den "Massenmark", da er speziell auf den IDE Editor zugeschnitten ist. Nun trat das Problem aber in einem meiner eigenen Programme auf wodurch ich mich genötigt fühlte, etwas dagegen zu tun. Und da ich den Fehler sicherlich auch noch in anderen Anwendungen bekommen könnte, muss etwas her, das unabhängig von der Anzahl der installierten WH_CALLWNDPROC hooks und von der Schachtelungstiefe der Controls ist.

Herausgekommen ist eine Bugfix Unit die man einfach dem Projekt hinzufügen und sich um nichts mehr kümmern muss. Die Unit ersetzt ein paar TWinControl Methoden and ändert dabei die rekursiven Realign-Aufrufe in iterative Aufrufe um. Dadurch tritt der Kernel Stack Overflow nicht mehr ein und alle Controls werden korrekt ausgerichtet.


Download der Unit im CodeCentral:
http://cc.codegear.com/item/25646
Angehängte Dateien
Dateityp: zip controlresizebugfix_212.zip (3,8 KB, 31x aufgerufen)
 
jbg

 
Delphi 10.1 Berlin Professional
 
#2
  Alt 25. Mai 2008, 11:51
Da gibt es doch glatt Komponenten, die auf den Windows Bug aufbauen bzw. nur durch diesen funktionieren, da sie einen Endlos-Resize auslösen.
Dadurch das die Rekursions-Beschränkung durch meinen Patch weg fällt, ist dieses Endlos-Resize natürlich eine Endlosschleife. Deswegen habe ich nun eine Enlos-Resize-Erkennung in die Unit eingebaut um die dadurch entstehende Endlosschleife abzubrechen.

Hier mal ein Beispiel für so eine Komponente:
Delphi-Quellcode:
type
  TBadPanel = class(TPanel)
  protected
    procedure WMSize(var Message: TWMSize); message WM_SIZE;
  end;

procedure TBadPanel.WMSize(var Message: TWMSize);
begin
  if Message.Width < 10 then
     Width := 11
  else if Message.Width > 10 then
     Width := 9;
  inherited;
end;

Da die Unit auf meinem aktuellsten Code basiert enthält sie auch die noch in der Experimentierphase befindliche "Optimized Resize Redraw" Funktionalität, die standardmäßig abgeschaltet ist. Dadurch könnten Formulare fliesender und flüssiger (schneller) vergrößert/verkleinert werden.
Andreas aka AHUser aka jbg
  Mit Zitat antworten Zitat
Antwort Antwort


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 00:19 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