Au menu, une correction de bogue :
- la fonction Pos() retourne une position basée sur 1 et non 0.
Deux nouveautés :
- les Variant, qui permettent de jouer plus facilement avec les propriétés des objets ;
- les objets dynamiques, qui permettent de déclarer un objet de façon très compacte ; la déclaration pouvant être utilisée directement en paramètre de fonction au besoin (Matrice, etc).
Ces fonctions ont été peu testées, n'hésitez pas à me remonter des bogues.
Une erreur dans cette actualité ? Signalez-le nous !
Alors pour SetTextFormat, c'est une fonction de Flash, autant je peux rendre la fonction Pos() du Pascal conforme à ce qu'on attends - c'est en fait un String.IndexOf() + 1, autant la méthode Flash restera 0 basée
pour le type Variant, tu peux forcer r.i := Integer(v.i);, par contre ça ne fonctionne pas avec un record...mais je ne suis pas certain que ce soit souhaitable non plus. Si le variant ne possède pas les membres du record la variable sera inconsistante.
En fait j'ai ajouté les variants et les objets dynamiques pour faciliter l'appel à certaines méthodes de Flash, notamment les matrices. Ou pour récupérer des noeuds XML sans passer par la déclaration d'un type spécifique.
type
obj = class
x : Integer;
end;
var
o: obj;
i: Integer;
begin
o := [x : 5]; // initialisation de l'objet
o.y := 2; // ne compile pas
o['y'] := 2; // fonctionne !
i := Integer(o['y']); // NB o['y'] est un Variant
o := [z : 8]; // fonctionne également...mais o.x est indéfini et o['z'] retourne le variant 8
end;
le plantage n'est pas normal, mais ton code est invalide, tu affectes un objet dynamique à "Matrix" qui est une définition de classe, et non ta variable "Matrice"
program Chaine;
uses
Flash8;
{$FRAME_WIDTH 420}
{$FRAME_HEIGHT 594}
{$BACKGROUND $F5F5DC}
{Beige}
const
ch = 'abcdefg';
var
t: TextField;
f: TextFormat;
s: string;
begin
t := TextField.Create(nil, 't', 0, 10, 10, 400, 574);
f := TextFormat.Create('Courier', 24);
t.SetNewTextFormat(f);
s := ch + #13 // abcdefg
+ IntToStr(Length(ch)) + #13 // 7
+ Copy(ch, 1, 3) + #13 // abc
+ IntToStr(Pos('a', ch)) + #13 // 1 (v13.03.16)
+ 'fin';
t.text := s;
f.color := clBlue;
t.SetTextFormat(Pos('7', s), Pos('1', s), f); // le 7 reste en noir
end.
Il reste un petit défaut dans la procédure SetTextFormat.
Bon, je vais essayer d'écrire un exemple avec un objet dynamique, pour voir si j'ai vraiment compris la chose. D'après l'exemple ça paraît plutôt simple.
J'ai essayé d'utiliser le type variant pour une matrice, d'après la page sur les objets dynamiques. J'obtiens une erreur, mais je ne sais pas si c'est mon code ou un bug.