Friday, June 16, 2006

Selezionare con il mouse: DrawFocusRect

Ecco come disegnare un rettangolo che permette di selezionare un area della form:

Servono 2 variabili boolean per indicare l'avvio della operazione di disegno ed il fatto che si sia effettivamente disegnato un rettangolo (per evitare effetti indesidetati).
Gli eventi da gestire sono il mousedown (che consente di attivare la procedura e per indicare il punto di inizio del disegno), il mousemouve (che cancella il precedente rettangolo e disegna il nuovo) ed il mouseup che disattiva l'operazione.

Ecco il codice inserito in Delphi:

type
TForm2 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private { Private declarations }
disegnato:boolean;
start:boolean;
rS:TRect;
xS,yS:Integer;

public { Public declarations }
end;

var Form2: TForm2;

implementation
{$R *.dfm}
procedure TForm2.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin
start:=true;
xS:=X;
yS:=Y;
rS.Left:=X;
rS.Top:=Y;
rS.Right:=X;
rS.Bottom:=Y;
disegnato:=false;
end;

procedure TForm2.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var tmp:integer;
begin
caption:=Format('(%d,%d) x (%d,%d)',[xS,yS,X,Y]);
if start then
begin
//cancello il vecchio
if disegnato then canvas.DrawFocusRect(rS);

// verifico se sono a sinistra o a destra del punto iniziale xS
if xS>X then
begin
rS.Right:=xS;
rs.Left:=X
End
else
begin
rS.Right:=X;
rS.Left:=xS;
end;

//verifico se sono sopra o sotto del punto iniziale yS

if yS>Y then
begin
rS.Bottom:=yS;
rS.Top:=Y
end
else
begin
rS.Bottom:=Y;
rS.Top:=yS;
end;

//disegno il rettangolo
canvas.DrawFocusRect(rS);
disegnato:=true;
end; //if Start
end;

procedure TForm2.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
start:=false;
//forza il repaint e la cancellazione dell'ultimo rettangolo
invalidate;
end;

La cosa più complicata è la gestione dei vertici del rettangolo: un rettangolo con un vertice finale sopra o a sinistra di quello iniziale non viene disegnato. Per questo bisogna invertire i vertici.

Thursday, June 15, 2006

Agire o reagire

Fare Help Desk = Reagire
Fare il Project Manager = Agire

La reazione non consente programmazione: si è chiamati per un problema e si va.

L'azione richiede analisi e studio: non esiste un problema impellente, esiste un progetto.

Non esiste un interruttore per passare da uno stato all'altro. Si decide di programmare (anche nel senso di sviluppare) ed ecco arriva una interruzione, si reagisce, e si cerca di ritornare a programmare.
Siamo, sono, in questo periodo come un processore. Lavoro per interrupt.
Il problema è che nel caso della reazione non si sa quando si potrà riprendere il lavoro lasciato.

E' chiaro: dipende da quanto tempo uno ha, qual'è la priorità del problema da risolvere, quanto è importante il progetto su cui si lavora.
Il dato di fatto però è uno solo: gli utenti se hanno un problema VOGLIONO risolverlo.

Esistono le sette opere di misericordia spirituale delle chiesa cattolica, almeno quattro di queste si sposano perfettamente con il lavoro di chi deve, un po' reagire, un po' agire, un po' reagire, un po' agire...

Saturday, June 03, 2006

Lo sviluppo in DELPHI

Ebbene si.
Nel mondo delle aziende che producono Software sta accadendo una cosa MOLTO interessante (per DELPHI).
Sappiamo tutti che la politica di Microsoft per gli ambienti di sviluppo è .NET oriented. Sappiamo anche che pochi prodotti interni a Microsoft sono stati sviluppati con .NET. Evidentemente deve essere accaduto che la scelta di lasciare Win32 un po' a se stesso ha lasciato spazio all'UNICO ambiente che offre le stesse capacità e produttività di sviluppo sia per .NET che per Win32: Delphi.
Esempi come Skype o prodotti ancora in fase Beta come Yahoo Go TV! sono sviluppati in Delphi.
Esistono MOLTI PC con ancora Windows 98 ed Hw poco performante. La scelta di .NET richiede un sacco di condizioni: installazione del Framework, una certa pesantezza nell'esecuzione, possibili incompatibilità con il SO installato etc.
Allora le aziende cominciano a capire la vera potenza di Delphi: elevata produttività, assoluta mancanza di concorrenti per lo sviluppo in Win32 (mantenendo una produttività pari a quella di .NET).
Di fronte ad un mondo che si muove verso nuovi standard (che non si sa se produrranno frutti) una certezza rimane: lo sviluppo per Win32 che funziona sarà possibile in DELPHI!