Newsgroup: it.comp.lang.delphi
Titolo: Creazione controllo

Salve,
   ho bisogno di creare un TDBEdit che mostri in alto a sinistra un 
numero di colore diverso rispetto al contenuto del campo sul tipo dei 
campi dei software per le dichiarazioni dei redditi:
una cosa simile:
+--------------------------+
|1                         |
|  Ciao sono il campo n. 1 |
+--------------------------+
non ho le idee molto chiare su come implementare tale caratteristica.
Ho guardato il metodo WMPaint ma non sono sicuro di aver compreso bene 
come funziona.
Qualcuno ï¿œ a conoscenza di un componente che fa giï¿œ quanto richiesto? 
non ho saputo cercare su internet.
Qualcuno puï¿œ suggerirmi una strada da percorrere per la creazione di 
questo componente?
Grazie, ciao.

 Grazie, ciao.
1) Se la tua versione di Delphi lo permette puoi usare i frame.
2) Se la tua versione di delphi lo permette puoi prendere spunto dal 
component TLabeledEdit e farlo diventare DB.
3) Domanda retorica ma... hai guardato nei soliti siti e soliti 
componenti (torry e jedi per dirne 1 :) )?
di piu' nin so :)
^_Goblin_^
-- 
Ibis et redibis non morieris in bello
http://goblinland.myminicity.com/

 non ho le idee molto chiare su come implementare tale caratteristica.
Che tipo di funzionalitï¿œ deve assolvere questo apice? (si tratterebbe 
di un apice giusto?)
Quali logiche lo legano al dato letto da db?
Anche io userei un tframe, perchï¿œ puoi combinare piï¿œ controlli insieme 
e gestirli come fossero uno solo.
ciao
-- 
Morde


Su una sola form rischio di avere decine di TDBEdit, e volevo porli 
sulla form con la stessa semplicitï¿œ di un TDBEdit.
Grazie, ciao.


Appunto: "TFrame" ... Sempre che la tua versione di delphi li supporti.
^_Taleban_Goblin_^



Sto usando D5 in attesa di passare a D10.
D5 ha i frame ma, non ho capito se posso crearli e poi metterli sulla 
component palette.
In ogno caso credo che il numero dovrei porlo al di fuori dell'area del 
TDBEdit e per me non va bene.
Io vorrei poter scrivere all'interno dell'area del TDBEdit:
+--------------------------+
|1                         |
|  Ciao sono il campo n. 1 |
+--------------------------+
non accanto al TDBEdit:
  +--------------------------+
1|  Ciao sono il campo n. 1 |
  +--------------------------+
Grazie, ciao.

Fai come dice taleban Goblin ;-)
Anzi, l'ho fatto io al volo proprio per te adesso, mi sono creato un 
new-> frame (D7), ci ho messo dentro due lable e un tdbedit, l'ho 
salvato.
Poi ho premuto col mouse tasto destro sopra il frame, e fatto "add to 
palette" emesso nella classica samples.
Poi ti apri la tua applicaizone, e sul form trascini il componente 
appena aggiunto alla paletta. Lui ti dice che devi aggiungere alle uses 
la unit del componente, confermi e ti ritrovi il frame da impostare 
come vuoi. Ne puoi aggiungere quanti ne vuoi.
Da adesso in avanti, ogni modifica farï¿œ al tframe verrï¿œ riportata su 
tutti i discendenti usati, merito dell VFI.
PS: per il frame sfrutta le anchors in modo che lo puoi ridimensionare 
e lui si adatta in lunghezza e larghezza, altezza, ecc.............
Copia incolla questo codice per avere la unit del mio frame, prima il 
pas poi il dfm:
************************************************
unit uMioFrame;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, 
Forms,
  Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls;
type
  TFrame1 = class(TFrame)
    DBEdit1: TDBEdit;
    LblDescrizione: TLabel;
    lblApice: TLabel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
implementation
{$R *.dfm}
end.
*********************************************************
object Frame1: TFrame1
  Left = 0
  Top = 0
  Width = 351
  Height = 67
  Font.Charset = ANSI_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  ParentFont = False
  TabOrder = 0
  DesignSize = (
    351
    67)
  object LblDescrizione: TLabel
    Left = 2
    Top = 17
    Width = 74
    Height = 13
    Caption = 'Ragione sociale'
    Font.Charset = ANSI_CHARSET
    Font.Color = clBlack
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = []
    ParentFont = False
  end
  object lblApice: TLabel
    Left = 2
    Top = 2
    Width = 7
    Height = 13
    Caption = '1'
    Font.Charset = ANSI_CHARSET
    Font.Color = clRed
    Font.Height = -11
    Font.Name = 'Tahoma'
    Font.Style = [fsBold]
    ParentFont = False
  end
  object DBEdit1: TDBEdit
    Left = 2
    Top = 31
    Width = 338
    Height = 21
    Anchors = [akLeft, akTop, akRight, akBottom]
    TabOrder = 0
  end
end
-- 
Morde

. Qui viene 
disegnato un triangolino, io vorrei scrivere un numero al posto del 
triangolino.
Con il frame, il numero viene scritto al di fuori dell'area del TDBEdit.
Grazie, ciao.

 Grazie, ciao.
mmm la cosa si complica (IMHO), devi derivarti il componente TDBEdit, 
aggiungere una property published, dove metterai il tuo numerino,e 
lavorare sul messaggio WMPaint in modo da disegnare quello che trovi 
dentro la property che ti sei creato, questo credo sia l'iter da 
seguire, dovresti provare a cercare se trovi qualcosa su T(DB)edit e 
WMPaint.
Spero di non aver detto una cavolata, non mi è mai capitato di dover 
scrivere dentro un edit :|


 Con il frame, il numero viene scritto al di fuori dell'area del TDBEdit.
Neanche se sovrapponi la label all'area del dbedit? (impostando sfondo 
trasparente ecc..)
Cosï¿œ eviti di ricorrere al subclassing del tdbedit per disegnarci 
dentro....
-- 
Morde


Penso anch'io che la strada sia questa, ï¿œ che poichï¿œ il metodo WMPaint ï¿œ 
privato.
Ho fatto delle prove ma, poichï¿œ tale metodo contiene riferimenti a 
membri privati di TDBEdit non ho saputo modificarlo bene, sono riuscito 
a modificarlo in modo da visualizzare il numero ma durante l'edit del 
campo esso mi viene cancellato.
Ciao.


Ho guardato i sorgenti del JvCheckedMaskEdit da dove ho preso spunto per 
un paio di metodi ed infine ho fatto il subclassing del metodo WMPaint 
del TDBEdit e sono riuscito nell'intento.
C'è ancora un piccolo difetto: durante l'editing il numero visualizzato 
nell'angolo viene in parte coperto per tornare visibile uscendo dal 
controllo. Ma va già bene così.
Ciao.

 TDBEdit e sono riuscito nell'intento.
Grande :-)
ciao
-- 
Morde