Hola eh leido Booch y creo que la VCL uno nunca deja de sorprenderse. Estuve estudiando tu código y en principio se entiende lo que realiza, pero cuando quise hacer una pequeña modificación, para desgracia no me anda, estuve viéndolo y tratando de buscarla la vuelta y nada.
Te comento la modificación que realize.
Declaro 2 variables publicas.
Código Delphi
[-] insertar2x2: Boolean; cuantos2x2: integer;
Le agrego un botón que dice Agregar 2x2.
En el evento onclick del boton pongo la bandera en true.
Código Delphi
[-]procedure TForm1.BInsertar2x2Click(Sender: TObject);
begin
insertar2x2:= True;
end;
Y por ultimo modifico el evento MouseDown del TPaintBox, tratando que solo tome el nuevo camino cuando se presiono el botón, o sea creo que deberia seguir andando igual cuando no se presiono en el botón.
Código Delphi
[-]procedure TForm1.PBoxMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var h: Boolean;
nombre2x2: string;
bl : TBlock;
begin
if not insertar2x2 then
begin
FRoot.DoMouseDown(Button, Shift, X, Y, h);
PBox.Refresh;
end
else
begin
nombre2x2:= 'Block 2 x 2 - ' + IntToStr(cuantos2x2);
inc(cuantos2x2);
bl := TBlock.Create;
bl.Rect := Rect(x, y, x+61, y+51);
bl.Name := nombre2x2;
TContact.Create(bl, ckInput);
TContact.Create(bl, ckInput);
TContact.Create(bl, ckOutput);
TContact.Create(bl, ckOutput);
FRoot.Add(bl);
insertar2x2:= false;
end;
end;
Se inserta los bloques, pero ya no funciona
a la hora de dibujar nuevas lineas y es justo ahí donde se me quemo un par de cables.
Rounin, te comento que me gusta mucho tu código
, creo que sobre este tipo de cosas hay poca documentación, mientras que DB se tiene Millones de lugares donde leer y preguntar, pero sobre diseñar software tipo CAD (Diseño Asistido por Computadora), no hay mucho
.
Desde ya muchas gracias.