Einzelnen Beitrag anzeigen

oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Komponente im Raster verschieben

  Alt 16. Aug 2007, 09:51
Hi sirThornberry,

das werd ich mal testen. Ich habe mich bis jetzt mit folgendem Trick beholfen:
- Move und Size wie erläutert,
- in Paint SetBounts mit korrogierten Positions- und Größenwerten aufgerufen.

Delphi-Quellcode:
procedure TBaseCustomControl.Paint;
begin
  inherited;
  Canvas.Font.Assign(self.Font);
  RastControl;
end;

procedure TBaseCustomControl.RastControl;
var Rest : Extended;
    ALeft, ATop, AHeight, AWidth : Integer;
begin
  if not FGrid then
    Exit;
  ALeft := ((Left Div FGridWidth) * FGridWidth) + (Round(Frac(Left/FGridWidth))*FGridWidth);
  ATop := ((Top Div FGridWidth) * FGridWidth) + (Round(Frac(Top/FGridWidth))*FGridWidth);
  AWidth := ((Width Div FGridWidth) * FGridWidth) + (Round(Frac(Width/FGridWidth))*FGridWidth);
  AHeight := ((Height Div FGridWidth) * FGridWidth) + (Round(Frac(Height/FGridWidth))*FGridWidth);
  SetBounds(ALeft, ATop, AWidth, AHeight);
end;
FGrid ist ein boolsches Property (Raster an aus) und FGridWidth ist natürlich die Gitterweite.
Erstaunlicher weise passiert jetzt folgendes. Bei Move wird während der Bewegung nicht gerastert, aber beim Ablegen auf das Raster korrigiert. Das hab ich auch so erwartet, wollte ich aber nicht haben.
Bei Größenänderung springt die gezogene Seite in Rasterschritten während des ziehens auf die neue Größe. Das wollte ich so haben, hab ich aber mit diesem Code nicht erwartet.

Na, ich probiers mal weiter.

Gruß oki
42
  Mit Zitat antworten Zitat