APPUNTI DELPHI 1.0

[Main Menu]  [Pop Up Menu]  [TDriveComboBox]  [TDirectoryListBox]  [TFileListBox]
[ListBox]  [Memo]  [MessageDlg]  [InputBox]  [Canvas]  [Bitmap]  [SerialeVBX]
[StringGrid]  [PuntatoreMouse]  [ProgressBar]  [TStringList]  [WMclose]
 


MAIN MENU

Per far apparire il trattino di sottolineatura per la scelta rapida far precedere la lettera dal simbolo "&".

Per creare una riga tra una voce e l'altra come nome dare solo un trattino "-".

Per indicare che una voce da accesso a un sottomenu selezionare la voce e premere CTRL e freccia a destra.
 


POP UP MENU

Come MAIN MENU, il P.UP M. si attiva premendo il tasto destro del mouse su un controllo che ha la proprietà PopUpMenu impostata con il nome del nostro menu.

Il P.UP M. appare nel punto in cui si fa click.
 


TDriveComboBox

Permette di scegliere l'unità disco su cui lavorare, un cambiamento produce l'evento onChange il disco attuale viene riportato come singolo carattere nella proprietà Drive, un errore di accesso al disco deve essere gestito dalla procedura di evento onChange.

Come collegare una DriveComboBox a una DirectoryListBox:

DirectoryListBox1.Drive:=DriveComboBox1.Drive;
 


TDirectoryListBox

Permette di scegliere la directory di lavoro, un cambiamento produce l'evento onChange, la directory attuale viene riportata dalla proprietà Directory, questa restituisce una stringa con il path completo, per la dir.principale è C:\, per la subdir WINDOWS è C:\WINDOWS. Impostando la proprietà Drive è possibile visualizzare l'albero delle directory di un qualsiasi disco.

Come collegare una DirectoryListBox a una FileListBox:

FileListBox1.Directory:=DirectoryListBox1.Directory;

Per partire da una directory specifica impostare le proprietà Drive e Directory della DirectoryListBox nell'evento OnCreate del Form.
 


TFileListBox

Permette di visualizzare i file contenuti nella directory specificata nella proprietà Directory, la proprietà Mask indica il tipo di file da visualizzare e tipicamente è impostata a *.*, il metodo Update consente di aggiornare la visualizzazione della lista rileggendo la situazione sul disco.

Il file selezionato
è riportato in:               FileListBox1.Items[FileListBox1.ItemIndex]
Il numero di file presenti è: FileListBox1.Items.Count
Il primo elemento è:          FileListBox1.Items[0]
L'ultimo elemento è:         FileListBox1.Items[Count-1]

Se la proprietà MultiSelect è true possono essere selezionati più file, lo stato di selezione di ogni singolo elemento può essere verificato o impostato con:

FileListBox1.Selected[indice]
 


COMPONENTE LISTBOX (Cercare ListBox)

Aggiunta di un elemento: ListBox1.items.add(STRINGA);
Vuotare la lista:        ListBox1.clear;
Numero di elementi:      ListBox1.items.count:integer
Indice selezionato:      ListBox1.itemindex:integer
Contenuto stringa
selezionata:             ListBox1.items.strings[ListBox1.itemindex]:string

(Gli indici vanno da 0 a ListBox.items.count - 1)
 


COMPONENTE MEMO (Cercare TMemoBox)

Aggiunta di un elemento:      Memo1.lines.add(STRINGA);
Numero di linee:              Memo1.lines.count
Vuotare contenuto memo:       Memo1.lines.clear;
Sapere se è stato modificato: Memo1.modified:boolean
Rendere a sola lettura:       Memo1.readonly:=true;
 


function MessageDlg('messaggio',tipodialogo,[bottoni,bottoni],0):word

Tipodialogo:
mtInformation  > Lettera i
mtConfirmation > Punto interrogativo
mtWarning      > Punto esclamativo in triangolo giallo
mtError        > X in cerchio rosso
mtCustom       > Nulla

Bottoni:
mbYes  mbNo  mbOK  mbCancel  mbAbort mbRetry mbIgnore mbAll
mbHelp  mbYesNoCancel  mbOkCancel  mbAbortRetryIgnore

Il valore ritornato dalla funzione è confrontabile con:
mrNone mrAbort mrYes  mrOk mrRetry mrNo  mrCancel mrIgnore mrAll

Se come bottoni si usano mnYesNoCancel, mbOKCancel o mbAbortRetryIgnore le parentesi quadre non devono essere scritte.

Impostando MsgDlgGlyphs:=false spariscono i bitmap dai bottoni.

Il messaggio può essere una stringa su più righe se si separano le righe con un #13.
 


FINESTRA DI INPUT PREDEFINITA (Cercare funzione InputBox)

function InputBox('intestazione','messaggio','stringa' ):string

Se si preme OK la stringa ritornata è quella visualizzata, se si preme Cancel o Esc o chiusura la stringa è quella specificata nel comando.
 


GRAFICA

I comandi grafici possono essere usati sul CANVAS (tela) di un Form, di un componente Image o di un componente Shape. Disegnare direttamente sul Canvas di un Form non è valido in quanto non è autoridisegnante, se il form viene coperto da un'altra finestra occorre ridisegnare tutto usando l'evento OnPaint (e non funziona neppure tanto bene...) un componente Image invece è autoridisegnante. Usando un componente Image le coordinate usabili vanno da X=0,Y=0 per l'angolo in alto a sinistra a Image1.Width-1,Image1.Height-1 per l'angolo in basso a destra.

Oggetto TCanvas.

L'oggetto TCanvas è una superfice di disegno, rappresenta l'area in cui le vostre applicazioni possono disegnare.
(A TCanvas object encapsulates a Windows HDC display context.)
Il modello di riempimento, la penna e il font usati per disegnare sul canvas sono specificati nelle proprietà Brush, Pen e Font. La posizione corrente della penna è specificata dalla proprietà PenPos. Per muovere la penna chiamare il metodo MoveTo.
Per scrivere del testo chiamare il metodo TextOut. Per determinare se il testo è adatto a una particolare area usare TextHeight e TextWidth. Per disegnare una linea dritta chiamare LineTo. Per disegnare una serie di linee dritte chiamare PolyLine. Per disegnare linee curve usare i metodi Arc o Chord.
Voi potete disegnare sul canvas una varietà di figure. Per disegnare un rettangolo chiamare Rectangle, per disegnare un rettangolo con angoli arrotondati chiamare RoundRect. Per disegnare un ellisse chiamare Ellipse, per disegnare una torta chiamare Pie, per disenare un poligono definito da una serie di punti chiamare Polygon. Per riempire un'area rettangolare con il pattern definito da Brush chiamare FillRect, per riempire l'interno di un'area fino ad incontrarne i bordi chiamare FloodFill.
Per emettere un formato grafico come un bitmap o un metafile su un canvas chiamare Draw. Per ridimensionare il formato grafico in una particolare figura quando viene disegnato chiamare StretchDraw. Per fare una copia di un'area rettangolare del canvas usare CopyRect. Quando un canvas viene modificato si produce l'evento OnChange. Immediatamente prima della modifica si produce un evento OnChanging. La proprietà Brush di un oggetto canvas o shape determina quale genere di colore e e pattern il canvas usa per riempire le figure grafiche e lo sfondo.
(Controls also specify an additional brush in their Brush properties, )
(which they use for painting their backgrounds.)
Per i controlli Brush è una proprietà runtime di sola lettura.

Riepilogo gerarchia delle proprietà e metodi principali:

Canvas.
        Pen.
           Color
              Width           (Larghezza linea in pixel, default 1)
           Style           (Default psSolid)
           Mode            (Default pmCopy, xor=pmXor)
        Brush.
              Color
           Style           (Default bsSolid, trasparente=bsClear)
        Font.
              Color
              Name
           Size
           Style

Comandi grafici usabili su un Canvas:
 

        MoveTo(X,Y)                     Sposta la penna in X,Y

        LineTO(X,Y)                     Tira una riga fino a X,Y (esclusi), X,Y
                                        diventano la nuova posizione della penna.

        Rectangle(X1,Y1,X2,Y2)          Disegna un rettangolo con l'angolo in
                                        alto a sinistra nel punto X1,Y1 e l'angolo
                                        in basso a destra nel punto X2-1,Y2-1.

        TextOut(X,Y,'stringa');         Scrive del testo alla posizione X,Y.

        Draw(X,Y,Bitmap);               Disegna il Bitmap sul Canvas.

        StretchDraw(Trect,Bitmap);      Disegna un bitmap dentro il
                                        rettangolo Trect sul Canvas.

        Pixels[X,Y]:=colore;            Imposta un singolo pixel al colore voluto.

        Ellipse(X1,Y1,X2,Y2);           Disegna un ellisse racchiusa nel
                                        rettangolo specificato dalle coppie di
                                        coordinate e la riempie con il brush
                                        attuale.

        TextOut(X,Y,'stringa');         Scrive del testo sul Canvas a X,Y.
 
 

Per tirare una riga dalla posizione X1,Y1 alla posizione X2,Y2 (X2,Y2 esclusi che diventano la nuova posizione della penna):

                MoveTo(X1,Y1);  LineTo(X2,Y2);

Per tirare una riga dalla posizione X1,Y1 alla posizione X2,Y2 (compresi X2,Y2 che diventano la nuova posizione della penna):

                MoveTo(X1,Y1);  LineTo(X2,Y2);  Pixels[X2,Y2]:=Pen.Color;

Proprietà Color per Pen, Brush e Font: TColor = -(COLOR_ENDCOLORS + 1)..$02FFFFFF; Il tipo TColor è usato per specificare il colore di un oggetto. E'usato dalla proprietà Color di tutti i componenti e da BackgroundColor di un tab set (TTabset). La unit Graphics contiene pratiche definizioni di costanti per TColor. Queste costanti identificano direttamente l'uno o l'altro dei colori disponibili nella palette di sistema (ad esempio clBlue mappa il colore blu) oppure quelli corrispondenti agli elementi di controllo di sistema definiti nella sezione colori del pannello di controllo di windows (ad esempio clBtnFace identifica il colore di sistema per la superfice dei bottoni).

Le costanti che identificano i colori di sistema sono: clAqua, clBlack, clBlue, clDkGray, clFuchsia, clGray, clGreen, clLime, clLtGray, clMaroon, clNavy, clOlive, clPurple, clRed, clSilver, clTeal, clWhite, e clYellow.

Le costanti che identificano i colori degli elementi di controllo sono: clActiveBorder, clActiveCaption, clAppWorkSpace, clBackground, clBtnFace, clBtnHighlight, clBtnShadow, clBtnText, clCaptionText, clGrayText, clHighlight, clHighlightText, clInactiveBorder, clInactiveCaption, clInactiveCaptionText, clMenu, clMenuText, clScrollBar, clWindow, clWindowFrame, e clWindowText. Se voi specificate Tcolor con uno specifico numero esadecimale a 4 byte invece di usare le costanti definite nella unit Graphics, i 3 byte più bassi rappresentano l'intensità dei tre colori BGR, $00FF0000 rappresenta la massima intensità del blu puro, $0000FF00 è il verde puro, $000000FF è il rosso puro, $00000000 è il nero, $00FFFFFF è il bianco.

(Se il byte più significativo è zero ($00) il colore ottenuto appartiene
( alla palette di sistema (?)
(the color obtained is the closest matching color in the system palette.
(If the highest-order byte is one ($01), the color obtained is the closest
( matching color in the currently realized palette.
(If the highest-order byte is two ($02), the value is matched with the
( nearest color in the logical palette of the current device context.
(To work with logical palettes, you must select the palette with the
(Windows API function SelectPalette. To realize a palette, you must use
(the Windows API function RealizePalette.

Per tutti i componenti o oggetti, ad eccezione della Color dialog box, la proprietà Color determina il colore di sfondo sul form o il colore di un oggetto di controllo grafico. Se la proprietà ParentColor di un controllo è true, allora il cambiamento della proprietà Color di un controllo genitore provoca il cambiamento automatico della proprietà Color del controllo stesso. Quando voi assegnate un valore alla proprietà Color di un controllo, la proprietà ParentColor del controllo è automaticamente settata a false.

Questi sono i possibili valori di Color:
clBlack   Nero           NERO
clMaroon  Marrone
clGreen   Verde
clOlive   Verde oliva
clNavy    Blu marino
clPurple  Porpora
clTeal    Teal
clGray    Grigio
clSilver  Grigio chiaro
clRed     Rosso          ROSSO
clLime    Verde chiaro   VERDE
clBlue    Blu            BLU
clFuchsia Fucsia         MAGENTA
clAqua    Acqua          CYAN
clWhite   Bianco         BIANCO
clYellow  Giallo         GIALLO

clBackground      Fondo di windows
clActiveCaption   Current Barra del titolo della finestra attiva
clInactiveCaption Barra del titolo delle finestre inattive
clMenu            Colore di fondo dei menu
clWindow          Colore di fondo delle finestre
clWindowFrame     Current color of window frames
clMenuText        Current color of text on menus
clWindowText      Current color of text in windows
clCaptionText     Current color of the text on the title bar of the active window
clActiveBorder    Current border color of the active window
clInactiveBorder  Current border color of inactive windows
clAppWorkSpace    Current color of the application workspace
clHighlight       Current background color of selected text
clHightlightText  Current color of selected text
clBtnFace         Current color of a button face
clBtnShadow       Current color of a shadow cast by a button
clGrayText        Current color of text that is dimmed
clBtnText         Current color of text on a button
clInactiveCaptionText Current color of the text on the title bar of an inactive window
clBtnHighlight    Current color of the highlighting on a button

La seconda metà della lista dei colori sono i colori di sistema di Windows. Il colore che appare dipende dallo schema di colori utente usato da Windows. Gli utenti possono cambiare questi colori usando il pannello di controllo. Il colore attuale che appare può variare da sistema a sistema. Quando voi usate la color dialog box per selezionare un colore, potete assegnare il suo valore alla proprietà Color della dialog box. Voi potete usare il valore contenuto all'interno della proprietà Color e assegnarlo alla proprietà Color di un altro controllo.

Nota: Il valore di Color può essere contenuto in una variabile longint.

Proprietà Pen (Per oggetto TCanvas)

La proprietà Pen è un oggetto di tipo Tpen, determina il genere di penna che il canvas usa per disegnare. L'oggetto TPen è usato per disegnare linee su un canvas (TCanvas) e incapsula HPEN di Windows. Il colore della penna è specificato nella proprietà Color. L'ampiezza in pixel della linea disegnata è specificato nella proprietà Width. Il pattern della linea (solid, dotted, e altro) è specificato dalla proprietà Style. La proprietà Mode specifica il colore della linea in relazione a quello dei pixel sopra cui è tracciata la linea. Per esempio, per colorare una linea del colore specificato nella proprietà Color settare Mode a pmCopy. Per colorare una linea del colore inverso a quello dello schermo settare Mode a pmNot. Quando la penna viene modificata si produce un evento OnChange.

Proprietà Style (per oggetto TPen)

TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear, psInsideFrame);

La proprietà Style determina lo stile in cui la penna traccia le linee. psSolid The pen draws a solid line.
psDash The pen draws a line made up of a series of dashes.
psDot The pen draws a line made up of a series of dots.
psDashDot The pen draws a line made up of alternating dashes and dots.
psDashDotDot The pen draws a line made up of a series of dash-dot-dot combinations.
psClear The pen draws lines made up no visible marks.
psInsideFrame The pen draws lines within the frame of closed shapes that specify a
bounding rectangle.

Proprietà Mode (Per oggetto TPen) La proprietà Mode determina come la penna traccia le linee sul canvas.

TPenMode = (pmBlack, pmWhite, pmNop, pmNot, pmCopy, pmNotCopy, pmMergePenNot, pmMaskPenNot, pmMergeNotPen, pmMaskNotPen, pmMerge, pmNotMerge, pmMask, pmNotMask, pmXor, pmNotXor);

La seguente tabella descrive il comportamento della penna per ogni modo.

pmBlack       Sempre nero.
pmWhite       Sempre bianco.
pmNop         Non cambiato.
pmNot         Inverso del colore dello schermo.
pmCopy        Colore specificato nella proprietà Color.
pmNotCopy     Inverso del colore specificato nella proprietà Color.
pmMergePenNot Combination of pen color and inverse of screen color.
pmMaskPenNot  Combination of colors common to both pen and inverse
of screen.
pmMergeNotPen Combination of screen color and inverse of pen color.
pmMaskNotPen  Combination of colors common to both screen and
inverse of pen.
pmMerge       Combination of pen color and screen color.
pmNotMerge    Inverse of pmMerge combination of pen color and screen color.
pmMask        Combination of colors common to both pen and screen.
pmNotMask     Inverse of pmMask combination of colors common to
both pen and screen.
pmXor         Combination of colors in either pen or screen, but not both.
pmNotXor      Inverse of pmXor combination of colors in either pen or screen,
but not both.

Proprietà Brush (per oggetto TCanvas):

property Brush: TBrush;

La proprietà Brush è un oggetto di tipo TBrush usato quando vengono riempite figure solide, come rettangoli e ellissi. L'interno di una figura è riempito con un colore o un pattern. TBrush incapsula HBRUSH di Windows. Il colore di riempimento è specificato nella proprietà Color di TBrush. Il pattern è specificato nella proprietà Style. Se è specificato un bitmap dalla proprietà Bitmap, il pattern di riempimento è definito dal bitmap piuttosto che dalla proprietà Style. Se il brush viene modificato si produce l'evento OnChange.

Proprietà Style (per oggetto TBrush)

property Style: TBrushStyle;

La proprietà Style di brush determina un pattern di riempimento per gli sfondi di windows o per le figure grafiche. La seguente definizione mostra i possibili valori di Style:

TBrushStyle = (bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross);

Proprietà Bitmap (per oggetto TBrush)

property Bitmap: TBitmap;

La proprietà Bitmap è un oggetto di tipo TBitmap disponibile solo in runtime. Questa proprietà abilita il brush a usare un'immagine bitmap per il riempimento, con la capacità di produrre un effetto di riempimento speciale come un pattern. Il bitmap deve essere alto 8 pixel e largo 8 pixel.

(Vedere oggetto TBitmap).

Proprietà Font (Per oggetto TCanvas)

property Font: TFont;

A TFont object defines the appearance of text. TFont encapsulates a Windows HFONT. A TFont object defines a set of characters by specifying their height, font family (typeface) name, and so on. The height is specified by the Height property. The typeface is specified by the Name property. The size in points is specified by the Size property. The color is specified by the Color property. The attributes of the font (bold, italic, and so on) are specified by the Style property. When a font is modified, an OnChange event occurs. In addition to these properties, methods, and events, this object also has the methods that apply to all objects.

Proprietà Size (per oggetto TFont):

property Size: Integer; The Size property is the size of the font in pixels. It is the height of the font plus the font's internal leading. If you are concerned with the height of the font on the screen--the number of pixels the font needs--use the Size property. If you want to specify a font's height using points, use the Height property instead. Delphi calculates Size using this formula: Font.Size = -Font.Height * Font.PixelsPerInch / 72 Therefore, whenever you enter a point size in the Size property, you'll notice the Height property changes to a negative value. Conversely, if you enter a positive Height value, the Size property value changes to a negative value.

Proprietà Style (per oggetto TFont) The Style property determines whether the font is normal, italic , underlined, bold, and so on. These are the possible values:

Value Meaning
fsBold      The font is boldfaced.
fsItalic    The font is italicized.
fsUnderline The font is underlined.
fsStrikeout The font is displayed with a horizontal line through it.

The Style property is a set, so it can contain multiple values. For example, a font could be both boldfaced and italicized.


COME RAPPRESENTARE DEI BITMAP SU UN CANVAS

Metodo    Draw (per oggetto TCanvas)
procedure Draw(X, Y: Integer; Graphic: TGraphic);
Metodo    StretchDraw
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
L'oggetto TGraphics è un antenato dell'oggetto TBitmap, è quindi possibile creare un Bitmap, usare LoadFromFile per caricare un'immagine grafica da disco e usare Draw o StretchDraw per disegnarla sul Canvas:

var Z:TBitmap;

Z:=TBitmap.Create;
Z.LoadFromFile('nome del file BMP');
....Canvas.Draw(X,Y,Z);
Z.Free;
The Draw method draws the graphic specified by the Graphic parameter on the canvas at the location given in the screen pixel coordinates (X, Y). Graphics can be bitmaps, icons, or metafiles.

This method draws the graphic specified by the Graphic parameter in the rectangle specified by the Rect parameter. Use this method to stretch or resize a graphic to the size of the rectangle.

Proprietà PenPos (Per oggetto TCanvas).

PenPos: TPoint; La proprietà PenPos è la posizione corrente di disegno della penna.
(The PenPos property is the current drawing position of the pen.)
Voi dovreste usare il metodo MoveTo per impostare la posizione corrente, piuttosto che cambiare direttamente PenPos.

Tipo TPoint.

TPoint = record
  X: Integer;
  Y: Integer;
end;
Proprietà ClipRect (Per oggetto TCanvas).

property ClipRect: TRect;

Proprietà a sola lettura, specifica un rettangolo con bordi clipping. Il rettangolo specificato con ClipRect definisce i bordi esterni dell'area di disegno del canvas. Un disegno con coordinate esterne al ClipRect viene tagliato e non appare sullo schermo. Per esempio, il ClipRect del canvas di un form ha le stesse dimensioni dell'area del form.

Tipo TRect.

TRect = record
  case Integer of
    0: (Left, Top, Right, Bottom: Integer);
    1: (TopLeft, BottomRight: TPoint);
end;


COMUNICAZIONI SERIALI

Delphi 1 non dispone di un componente per gestire le comunicazioni seriali, pertanto è necessario usare il componente VBX di Visual Basic MSCOMM.VBX.

Il controllo comunicazioni fornisce due modi per trattare le comunicazioni:

Il metodo event driven è un modo estremamente efficace e potente per gestire l'interazione con la porta seriale.

Event-driven communications is a very powerful method for handling serial port interactions.

In molte situazioni voi volete notificare il momento in cui un evento avviene, come quando arriva un carattere o avviene un cambiamento delle linee carrier detect (CD) o request to send (RTS).

In many situations you want to be notified the moment an event takes place, as when a character arrives or a change occurs in the Carrier Detect (CD) or Request To Send (RTS) lines.

In casi simili voi dovete usare l'evento OnComm del controllo per catturare le gestire questi eventi di comunicazione.

In such cases, you would use the communications control's OnComm event to trap and handle these communications events.

l'evento OnComm riconosce e gestisce inoltre gli errori di comunicazione.

The OnComm event also detects and handles communications errors.

Per la lista di tutti i possibili eventi ed errori di comunicazione vedere la proprietà CommEvent.

For a list of all possible events and communications errors, see the CommEvent property.

Voi potete inoltre sondare eventi e errori controllando il valore della proprietà CommEvent dopo ogni funzione critica del vostro programma.

You can also poll for events and errors by checking the value of the CommEvent property after each critical function of your program.

(This may be preferable if your application is small and self-contained.)
(For example, if you are writing a simple phone dialer, it may not make
( sense to generate an event after receiving every character, because
( the only characters you plan to receive are the OK response from
(the modem.

Ogni controllo comunicazione che voi usate corrisponde a una porta seriale. Se nella vostra applicazione vi è necessario accedere solo a una porta dovete usare solo un controllo comunicazione. L'indirizzo della porta e dell'interrupt si può cambiare con il pannello di controllo di windows.

Each communications control you use corresponds to one serial port. If you need to access more than one serial port in your application, you must use more than one communications control. The port address and interrupt address can be changed from the Windows Control Panel.

Benchè il controllo comunicazione abbia molte proprietà importanti, queste sono le poche con cui dovete avere inizialmente familiarità.

Although the communications control has many important properties, there are a few that you should be familiar with first.

Properties Description

CommPort Sets and returns the communications port number.
Settings Sets and returns the baud rate, parity, data bits, and
stop bits as a string.
PortOpen Sets and returns the state of a communications port.
Inoltre opens and closes a port.
Input Returns and removes characters from the receive buffer.
Output Writes a string of characters to the transmit buffer.

Il valore attuale delle costanti di evento ed errore è definito nel file VisualBasic CONSTANT.TXT oppure nel file CONSTANT.H incluso con il visual control pack.

The actual values of the event and error constants are defined in the Visual Basic CONSTANT.TXT file or the CONSTANT.H file included with the Visual Control Pack.

Quando create e distribuite applicazioni che usano il controllo comunicazione, dovete installare il file MSCOMM.VBX nella directory \SYSTEM di windows. Il kit di setup incluso con visual basic dispone di uno strumento per aiutarvi a scrivere programmi di setup che installano correttamente le vostre applicazioni.

When you create and distribute applications that use the communications control, you should install the file MSCOMM.VBX in the customer's Microsoft Windows \SYSTEM subdirectory. The Setup Kit included with Visual Basic provides tools to help you write setup programs that install your applications correctly.

RIEPILOGO PORTA SERIALE

Comm1.InBufferSize:=1024 ' Dimensioni buffer di input
Comm1.RThreshold:=1 ' Abilita evento OnOnComm per ogni
' chr$
Comm1.CommPort:=1 ' Specifica la porta 1 o 2
Comm1.Settings:='9600,n,8,2' ' Protocollo
Comm1.PortOpen:=true ' Apre la porta, DTR va alto
Comm1.Output:=chr(45) ' Trasmette chr$ o stringa
Fn Comm1.InBufferCount:integer ' Nr di chr$ ricevuti nel buffer
Fn Comm1.Input:string ' Legge stringa dal buffer
Comm1.Break:=true ' Attiva segnale di break
Comm1.Break:=false ' Disattiva segnale di break
Comm1.PortOpen:=false ' Chiude porta

Tenendo RThreshold=0 non avviene l'evento OnOnComm e la porta deve essere gestita da programma. Con RThreshold=N avviene OnOnComm ogni N chr$ ricevuti.
 


USO GRIGLIA DI STRINGHE (Componente TStringGrid)

RowCount,ColCount:longint     Definiscono il numero di righe e colonne.
FixedRows,FixedCols:integer   Numero di righe e colonne fisse di titolo.
GridLineWidth:integer         Spessore linee griglia, 0=nessuna griglia.
DefaultColWidth:integer       Larghezza colonne in pixel.
DefaultRowHeight:integer      Altezza righe in pixel.
ColWidths[index]:integer      Imposta o riporta larghezza di una singola
                              colonna, index=0 è la prima colonna a sinistra.
RowHeights[index]:integer     Imposta o riporta l'altezza di una singola
                              riga, index=0 è la prima riga in alto.
Top,Left,Width,Height         Dimensioni dell'area che visualizza la griglia,
                              se la griglia è più grande di quest'area è
                              possibile visualizzare le barre di scorrimento
                              impostando VscrollBar, le eventuali righe e colonne
                              fixed non scorrono.
Cells[X,Y: Integer]: string;  Imposta o riporta la stringa contenuta in una
                              singola cella, la prima cella in alto a sinistra è
                              [0,0], l'ultima in basso a destra è
                              [ColCount-1,RowCount-1].
Font                          Definisce il tipo di testo visualizzato nelle celle

Per impostare le dimensioni dell'area di visualizzazione uguali a quelle della griglia:

  t:=0;
  for h:=0 to stringgrid1.colcount-1 do t:=t+stringgrid1.colwidths[h]+1;
  stringgrid1.width:=t+1;
  t:=0;
  for h:=0 to stringgrid1.rowcount-1 do t:=t+stringgrid1.rowheights[h]+1;
  stringgrid1.height:=t+1;
Suggerimento: Per visualizzare COURRIER NEW height -12 usare celle alte 20 e larghe 8*chr (circa).

BorderStyle bsNone o bsSingle

COLORI:
Azzurrino: $00dfc064
 


CAMBIARE IL CURSORE DEL MOUSE:

Con l'image editor è possibile creare file .CUR, la funzione LoadCursor però sembra non funzionare. Un'alternativa è creare due array di 144 byte contenenti la descrizione del cursore e usare la funzione CreateCursor:

function CreateCursor(Instance: THandle; Xhotspot, Yhotspot, Width, Height: Integer; ANDbitPlane, XORbitPlane: Pointer):HCursor; Un cursore è codificato in 32 righe e 36 colonne per un totale di 144 byte. La prima riga è composta da 36 bit in 4 gruppi di 8+1, il nono bit di ogni gruppo non viene visualizzato, pertanto l'area grafica effettiva è di 32*32 pixel: ........X........X........X........X per 32 righe.

I primi 4.5 byte degli array ANDbitPlane^ e XORbitPlane^ decrivono i pixel della prima riga del cursore.

AND     XOR     Pixel
0       0       Nero
0       1       Bianco
1       0       Trasparente
1       1       Reverse
Una volta creati gli array è ad esempio possibile attivare il cursore nel seguente modo:
Screen.Cursors[5]:=CreateCursor(HInstance,5,7,32,32,
                           ANDbitPlane,XORbitPlane);
Form1.Cursor:=5;
Esempio:
(*------------------------------------------------------------------------
   Creazione cursore mano1, indice nella lista cursori=5
   I=area non usabile, 0=pixel nero,   .=pixel bianco
   blank=pixel trasparente,  r=pixel reverse
 -----------------------------------------------------------------------*)

procedure CreaCursoreMano1;
type
  Tdati1=array[1..144] of byte;
  Tstring36=string[36];
const
  CCursDesc:array[1..32] of Tstring36=(
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '    00  I        I        I        I',
    '   0..0 I        I        I        I',
    '   0..0 I        I        I        I',
    '   0..0 I        I        I        I',
    '   0..00I0 00 00 I        I        I',
    '   0..0.I.0..0..0I        I        I',
    '   0..0.I.0..0..0I        I        I',
    '   0..0.I.0..0..0I        I        I',
    '   0..0.I.0..0..0I        I        I',
    '0000..0.I.0..0..0I        I        I',
    '0..0....I.......0I        I        I',
    '0..0....I.......0I        I        I',
    '0..0....I.......0I        I        I',
    '0..0....I.......0I        I        I',
    '0.......I.......0I        I        I',
    '0.......I.......0I        I        I',
    ' 0......I.......0I        I        I',
    '  0.....I......0 I        I        I',
    '   0....I......0 I        I        I',
    '   00000I0000000 I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I',
    '        I        I        I        I'   );
var
  andbit,xorbit:^Tdati1;
  h,t,xorb,andb,p,esp:integer;
  ch:char;
begin
  new(andbit); new(xorbit);
  esp:=128;    p:=1;
  for h:=1 to 32 do for t:=1 to 36 do
  begin
    ch:=CCursDesc[h][t];
    if ch=' '      then begin andb:=1; xorb:=0 end
    else if ch='0' then begin andb:=0; xorb:=0 end
    else if ch='.' then begin andb:=0; xorb:=1 end
    else if ch='r' then begin andb:=1; xorb:=1 end;
    if andb=1 then andbit^[p]:=andbit^[p] or esp
              else andbit^[p]:=andbit^[p] and (esp xor 255);
    if xorb=1 then xorbit^[p]:=xorbit^[p] or esp
              else xorbit^[p]:=xorbit^[p] and (esp xor 255);
    if esp=0 then begin esp:=128; inc(p) end else esp:=esp div 2;
  end;
  Screen.Cursors[5]:=CreateCursor(HInstance,5,7,32,32,andbit,xorbit);
  dispose(andbit); dispose(xorbit);
end;
 


Usare una casella image per rappresentare una barra analogica:

In questo esempio il 100 è il valore massimo da rappresentare (0..100%) ed è preso da una scrollbar, la barra viene cancellata e ridisegnata ogni volta.
procedure TForm1.ScrollBar1Change(Sender: TObject);
var pos:longint;
begin
  with image1.canvas do
  begin

    pen.color:=clblack;
    brush.color:=clwhite;
    rectangle(0,0,image1.width,image1.height);

    pos:=(100-scrollbar1.position);
    pos:=pos*(image1.width-1) div 100;

    if pos>1 then
    begin
      pen.color:=clgreen;
      brush.color:=clgreen;
      rectangle(1,1,pos,image1.height-1);
    end;

  end;
end;


OGGETTO TSTRINGLIST:

Lista di stringhe ordinata oppure no, può essere trasferita/caricata direttamente con una assegnazione alla/dalla proprietà Items di una ListBox o alla/dalla proprietà Lines di una MemoBox, dispone di metodi per il caricamento/salvataggio da/su disco.

Gli elementi sono numerati a partire da 0, l'indice massimo è Count-1.

Dichiarazione istanza:       var StringList1:TStringList;
Istanziazione (in onCreate): StringList1:=TStringList.Create;
Distruzione (in onDestroy):  StringList1.Free;
Numero elementi:             StringList1.Count:integer
Cancellazione elementi:      StringList1.Clear;
Aggiunta elemento:           StringList1.Add('stringa');
Cancellazione elemento N:    Stringlist.Delete(indice);
Inserimento in posiz.N:      StringList1.Insert(indice,'stringa');
Spostamento da indice1 a indice2:   StringList1.Move(indice1,indice2);
Scambio tra indice1 e indice2:      StringList1.Exchange(indice1,indice2);
Ritorna l'indice di una
stringa(-1=non trovato):     StringList1.IndexOf('stringa'):integer;
Cerca una stringa:           StringList1.Find('stringa',var indice):boolean;
Accesso diretto alla Nesima stringa:   StringList1.Strings[indice]
Ordina alfabericamente:      StringList1.Sort;
Controlla se è ordinata:     StringList1.Sorted:Boolean;
Setta controllo duplicazione
(solo per sorted):           StringList1.Duplicates:=modo;
                             modo =(dupIgnore, dupAccept, dupError)
Carica da un file:           StringList1.LoadFromFile('path e nome');
Salva in un file:            StringList1.SaveToFile('path e nome');

Sono inoltre disponibili ulteriori proprietà e metodi per l'inclusione di oggetti (es:BitMap) e l'aggiunta diretta degli elementi di un altra TstringList (AddStrings).
 


INTERCETTARE IL MESSAGGIO DI CHIUSURA FINESTRA:

Nella sezione protected del form scrivere:

protected
    procedure WMClose(var M:TWMClose); message WM_Close;
 

{Chiusura con X, intercettando il messaggio WM_Close !}
procedure TForm1.WMClose(var M:TWMClose);
begin
  if memo1.modified then begin
      ......
  end;
  if not memo1.modified then inherited;
end;


Pagina realizzata da Claudio Fin
Ultimo aggiornamento 22-9-2000