Index: VerpakkingsDefinitie/UI/Util.pas =================================================================== diff -u -r587 -r593 --- VerpakkingsDefinitie/UI/Util.pas (.../Util.pas) (revision 587) +++ VerpakkingsDefinitie/UI/Util.pas (.../Util.pas) (revision 593) @@ -3,13 +3,16 @@ interface uses + Vcl.ExtCtrls, // Control op grid Vcl.Controls, System.SysUtils, // Free control children System.Types, Vcl.Graphics; // Color lightener type TUtil = class class procedure VervangControl(OudeControl: TControl; NieuweControl: TControl); - class procedure FreeControlChildrenDeep(AControl: TControl); + class procedure PlaatsControlOpGrid(Grid: TGridPanel; Control: TControl; RowI: Integer; ColI: Integer; RowSpan: Integer = 1; + ColSpan: Integer = 1); + class procedure FreeControlChildren(AControl: TControl); class function LightenColor(RGB: Cardinal; Percentage: Integer): Cardinal; static; end; @@ -34,33 +37,38 @@ OudeControl.visible := False; end; -procedure FreeControlChildrenRec(AControl: TControl); +// CONTROL OP GRID +class procedure TUtil.PlaatsControlOpGrid(Grid: TGridPanel; Control: TControl; RowI: Integer; ColI: Integer; RowSpan: Integer = 1; + ColSpan: Integer = 1); +var + index: Integer; begin - if not Assigned(AControl) then - exit; - if AControl is TWinControl then - begin - // Tijden het free-en kan zijn dat er elementen verdwijnen uit de lijst. - // Het aantal elementen moet dus steeds opnieuw gecontroleerd worden (een for-lus berekent dit eenmalig) - while TWinControl(AControl).ControlCount > 0 do - FreeControlChildrenRec(TWinControl(AControl).Controls[0]); - end; - FreeAndNil(AControl); + // Toevoegen aan grid panel op eerste lege plaats (Bij het toevoegen kan dit niet worden gekozen. + // Het wordt in de eerste lege plaats gezet) + Control.parent := Grid; + Control.visible := True; // Staat default op false + Control.Align := alClient; // Maakt elementen zo groot als het kan + Control.AlignWithMargins := True; // Spacing tussen de schermen + // Positie binnen grid aanpassen + index := Grid.ControlCollection.IndexOf(Control); + Grid.ControlCollection[index].row := RowI; + Grid.ControlCollection[index].RowSpan := RowSpan; + Grid.ControlCollection[index].Column := ColI; + Grid.ControlCollection[index].ColumnSpan := ColSpan; end; // FREE CONTROL CHILDREN // Recursieve methode om de kinderen van een TWinControl te free-en (hanging pointers voorkomen) // Gebaseerd op: https://stackoverflow.com/questions/414928/is-there-any-way-to-get-all-the-controls-on-a-container-control -class procedure TUtil.FreeControlChildrenDeep(AControl: TControl); +class procedure TUtil.FreeControlChildren(AControl: TControl); begin - if not Assigned(AControl) then - exit; if AControl is TWinControl then begin // // Tijden het free-en kan zijn dat er elementen verdwijnen uit de lijst. // // Het aantal elementen moet dus steeds opnieuw gecontroleerd worden (een for-lus berekent dit eenmalig) while TWinControl(AControl).ControlCount > 0 do - FreeControlChildrenRec(TWinControl(AControl).Controls[0]); + if Assigned(TWinControl(AControl).Controls[0]) then + TWinControl(AControl).Controls[0].Free(); end; end; @@ -107,7 +115,8 @@ H, L, S: Double; R, G, B: Word; cMax, cMin: Double; - Rdelta, Gdelta, Bdelta: Word; { intermediate value: % of spread from max } + Rdelta, Gdelta, Bdelta: Word; + { intermediate value: % of spread from max } begin R := GetRValue(RGB); G := GetGValue(RGB); @@ -144,7 +153,8 @@ begin H := (HLSMAX / 3) + Rdelta - Bdelta end - else // B == cMax + else + // B == cMax begin H := ((2 * HLSMAX) / 3) + Gdelta - Rdelta; end;