Bonjour,
Je suis actuellement en train de me faire un logiciel de test de langue anglaise (Bulats). Parmis les épreuves du test, il y en a une où il faut compléter un texte avec des trous.
J'ai donc utilisé un TMemo pour afficher le texte à trou (contenu dans un fichier), à l'intérieur de ce mémo, là ou il y a un trou à remplir, j'ai placé un texte fixe : XXXXXXXXX, pour repérer les trous dans le memo. Ensuite, je parcoure le MEMO à la recherche de ce texte et dès que je le trouve, j'essaie de placer soit un combobox, soit un TEdit , soit un TCombobox par dessus pour permettre au candidat de remplir ou de sélectionner un mot.
Sauf que je ne parvient pas à placer correctement mon TEdit (ou TCombobox) sur le TMemo.
Le programme que j'ai essayé de faire est dépendant de la police, et de l'ordinateur sur lequel il fonctionne (j'ai essayé sur plusieurs PC). Voici le bout de code qui me pose probléme :
FMain.P_Audio.Visible:=true;//
FMain.P_Text_Choice.Visible:=true;
FMain.B_AudioScript.Visible:=False;
FMain.B_Ecoute_Audio2.Visible:=False;
FMain.B_Ecoute_Audio1.Visible:=False;
hc:=FMain.B_AudioScript.Canvas.TextHeight('O')+1; // B_Audioscript est un TImage dont la proprièté TFont est la même que celle du Memo
//tc:=FMain.B_AudioScript.Canvas.TextWidth('OOOOOOOOOO'); // Comme le Memo n'a pas de TCanvas, j'ai essayé de faire comme ca
tc:=10*10+4; // mais ce n'est pas concluant
// les combos à placer au dessus des différents trous
FMain.ComboBox1.Width:=tc;
FMain.ComboBox2.Width:=tc;
FMain.ComboBox3.Width:=tc;
FMain.ComboBox4.Width:=tc;
FMain.ComboBox5.Width:=tc;
FMain.ComboBox1.Height:=hc-8;
FMain.ComboBox2.Height:=hc-8;
FMain.ComboBox3.Height:=hc-8;
FMain.ComboBox4.Height:=hc-8;
FMain.ComboBox5.Height:=hc-8;
FMain.ComboBox1.Visible:=True;
FMain.ComboBox2.Visible:=True;
FMain.ComboBox3.Visible:=True;
FMain.ComboBox4.Visible:=True;
FMain.ComboBox5.Visible:=True;
FMain.ComboBox1.ItemIndex:=-1;
FMain.ComboBox2.ItemIndex:=-1;
FMain.ComboBox3.ItemIndex:=-1;
FMain.ComboBox4.ItemIndex:=-1;
FMain.ComboBox5.ItemIndex:=-1;
FMain.Edit1.Visible:=False;
FMain.Edit2.Visible:=False;
FMain.Edit3.Visible:=False;
FMain.Edit4.Visible:=False;
FMain.Edit5.Visible:=False;
k:=1;
for i:=0 to FMain.M_Text_choice.Lines.Count-1 do // Je parcoure toutes les lignes du Memo
begin
texte:=FMain.M_Text_choice.Lines.Strings[i];
j:=pos('XXXXXXXXXX',texte); // à la recherche de la chaine XXXXXXX
while j>0 do
begin
texte1:=copy(texte,1,j-1);
delete(texte,1,j+9);
texte:=texte1+'OOOOOOOOOO'+texte; // Cette chaine, je la change en OOOOOOO de manière à pouvoir refaire une détection sur la même ligne
FMain.M_Text_choice.Lines.Strings[i]:=texte;
//j:=trunc(FMain.B_AudioScript.Canvas.TextWidth(texte1)*1.2);
j:=length(texte1)*10;
case k of // en fonction du numéro du trou actuel, on place soit Combobox1 sur le trou 1, combobox 2 sur le trou 2 etc...
1 : begin
FMain.ComboBox1.Left:=j;
FMain.ComboBox1.Top:=i*hc+4;
end;
2 : begin
FMain.ComboBox2.Left:=j;
FMain.ComboBox2.Top:=i*hc+4;
end;
3 : begin
FMain.ComboBox3.Left:=j;
FMain.ComboBox3.Top:=i*hc+4;
end;
4 : begin
FMain.ComboBox4.Left:=j;
FMain.ComboBox4.Top:=i*hc+4;
end;
5 : begin
FMain.ComboBox5.Left:=j;
FMain.ComboBox5.Top:=i*hc+4;
end;
end;
k:=k+1;
j:=pos('XXXXXXXXXX',texte);
end;
end;
FMain.ComboBox1.Color:=clWhite;
FMain.ComboBox2.Color:=clWhite;
FMain.ComboBox3.Color:=clWhite;
FMain.ComboBox4.Color:=clWhite;
FMain.ComboBox5.Color:=clWhite;
Merci à ceux qui pouront me dire comment faire pour connaitre la position en pixel d'un texte dans un TMemo
Oniria