Newsgroup: it.comp.lang.delphi
Titolo: Automatizzare etichette

Salve ... Ho un problema che non so neanche come cercarlo...quindi cerco
aiuto a voi..
In una form dove c sono vari oggetti ( edit .. label ... shape ) in base al
tag voglio modificare la caption della varie label...
Sono arrivato a questo punto....
   For I := 0 To (AziendaForm.ComponentCount-1) Do
   Begin
      If AziendaForm.Components[I].Tag <> 0 Then
      Begin
         DM.QY_Speech.First;
         While Not DM.QY_Speech.Eof Do
         Begin
            If Copy(DM.QY_SpeechID.AsString,1,6) =
IntToStr(AziendaForm.Components[I].Tag) Then
               If StrToInt(Copy(DM.QY_SpeechID.AsString,7,3)) =
StrToInt(MainForm.Edit1.Text) Then
                .... a questo punto so con certezza qual'e' l'oggetto ...
diciamo che sia una label ... come faccio a sostituire Label4.caption :=
'prova' ???
Grazie

               If StrToInt(Copy(DM.QY_SpeechID.AsString,7,3)) =
5)  Vediamo se indovino.. lavoravi in vb6??
questo non è vb. spezzare gli if in delphi ha senso solo se disattivi
con  il realtivo switch il criterio di valutazione degli operatori
boolean.
In vb, una condizione come questa:
  if (a=b) and (c=d) and (e=f)
viene valutata fino in fondo anche se una qualsiasi di esse è false.
In delphi, con le impostazioni di default, se la prima non è
rispettata le altre non vengono valutate.
6)  Eccessiva dipendenza.
Fai riferimento diretto a componenti di altre forms.
Risultato: questo codice non sarà mai riutilizzabile.
Delphi è OO, non a programmazione strutturata.
7) Non ho capito la domanda.
nel data module:
function Tdm.LoadCaptions(const ACompanyCode, AList: TStringList):
integer;
begin
   Result := False;
   AList.Clear;
   qryLabels.Close;
   qryLabels.ParamByName('CompanyCode').AsString := ACompanyCode;
   qryLabels.Open;
   while not qryLabels.Eof do
   begin
       AList.Add(format('%d=%s', [
                  qryLabels.FieldByName('ObjTag').AsInteger,
                  qryLabels.FieldByName('ObjCaption').AsString;
      qryLabels.Next;
   end;
  qryLabels.Close;
  Result := True;
end;
sulla form:
var
  CaptionList:: TStringList;
  i: integer;
  Idx: integer;
begin
  CaptionList := TStringList.Create;
  try
    dm.LoadCaption( IntToStr(AziendaForm.Components[I].Tag,
CaptionList);
   For I := 0 To Pred(AziendaForm.ComponentCount) Do
    Begin
        KeyTag := Trim(IntToStr(AziendaForm.Components[I].Tag);
        Idx :=  CaptionList.IndexOf(keyTag)
        if Idx  <> -1 then
        begin
         AziendaForm.Components[I].Caption :=
CaptionList.Values[KeyTag];
         CaptionList.Delete(Idx);
         end;
    end;
finally
  CaptionList.Free;
end;
AS

sorry:
function Tdm.LoadCaptions(
  const ACompanyCode: string;
  AList: TStringList): integer;
begin
   Result := False
....
AS

No... Vengo dal clipper...
Questo e' solo una bozza d un test che sto facendo...
begin
  CaptionList := TStringList.Create;
  try
    dm.LoadCaption( IntToStr(AziendaForm.Components[I].Tag,CaptionList);
   For I := 0 To Pred(AziendaForm.ComponentCount) Do
    Begin
        KeyTag := Trim(IntToStr(AziendaForm.Components[I].Tag);
        Idx := CaptionList.IndexOf(keyTag)
        if Idx <> -1 then
        begin
         AziendaForm.Components[I].Caption := CaptionList.Values[KeyTag];
*** il problema e' proprio in questa riga d sopra... con l'help la proprietą
caption nn appare e non trovo il modo d sostituire quello che e' in
aziendaform.component[i] ( che a debug giustamente mi dice label6)
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Ti serve un typecast, spiegato chiaramente nella guida in linea:
....
        Idx := CaptionList.IndexOf(keyTag)
        if Idx <> -1 then
        begin
         TLABEL(AziendaForm.Components[I].)Caption :=
CaptionList.Values[KeyTag]; 
....
AS

 ha scritto nel messaggio
news:1126536457....@o13g2000cwo.googlegroups.com...

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

Allora hai evitato il "lato oscuro"... Beato te.. :)))
AS


 
