Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: schumi - Giugno 18, 2013, 04:48:53 pm

Titolo: modificare un oggetto dal nome
Inserito da: schumi - Giugno 18, 2013, 04:48:53 pm
scusate ma sono neofita di pascal (almeno su windows  ;D)....

poniamo di avere 100 tasti da button1 a button100, voglio in un ciclo FOR cambiare la proprietà caption senza dover scrivere 100 righe di codice, carico il nome dell'oggetto su una variabile? e poi?

qualcuno mi aiuta?

grazie
Titolo: Re:modificare un oggetto dal nome
Inserito da: Stilgar - Giugno 18, 2013, 05:16:43 pm
for idx := 1 to 100 do
button[idx].caption  := 'L''etichetta che piace';

Titolo: Re:modificare un oggetto dal nome
Inserito da: schumi - Giugno 18, 2013, 05:45:52 pm
ho provato ma mi da questo errore compilando  Error: Identifier not found "button".  :'(

i tasti esistono già, non sono creati runtime  :-\
Titolo: Re:modificare un oggetto dal nome
Inserito da: Legolas - Giugno 18, 2013, 07:06:31 pm
Il problema è che così dovresti creare i button a runtime. Puoi provare invece a fare una cosa del genere:

Codice: [Seleziona]
var
  i : Integer;
begin
  for i := 0 to ComponentCount-1 do
    if (Components[i] is TButton) then
      TButton(Components[i]).Caption := 'Bu!';

In questo modo ti cambia la caption di tutti i button sul form. Puoi estendere ulteriormente il codice, controllando il valore della proprietà "tag" del button e decidere, a seconda del valore trovato, se cambiare o meno la caption. Ad esempio, impostando a 1 la proprietà tag dei button ai quali devi cambiare la caption, il codice diventa:
Codice: [Seleziona]
var
  i : Integer;
begin
  for i := 0 to ComponentCount-1 do
    if (Components[i] is TButton) then
      if TButton(Components[i]).Tag = 1 then
        TButton(Components[i]).Caption := 'Bu!';   

Titolo: Re:modificare un oggetto dal nome
Inserito da: schumi - Giugno 18, 2013, 07:26:29 pm
Esattamente quello che mi serviva  :D :D :D :D

invece di usare Tag controllo direttamente il nome if AnsiLeftStr(TBitBtn(Components).Name,8) = 'bntTasto' then

grazie!!!!