Bonjour,
J'écris un petit soft pour automatiser l'ajout d'une ligne dans le fichier "host" de Windows pour réorienter les membres d'une association vers un site web en développement car le nom de domaine n'est pas encore acquis.
A l'ouverture de la fenêtre principale, je réalise quelques tests dont le présence ou non de la ligne à ajouter. pour cela j'utilise le code trouvé dans ce post et qui fonctionne (testé séparemment).
J'incorpore ce source dans mes tests et il ne me donne pas le numéro de ligne lorsque la ligne est ajouté à la main au host (donc bien présente).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 procedure TForm1.Button1Click(Sender: TObject); var posM,posL,i,j:integer; trouve:boolean; NumeroLigne:integer; begin for i:=0 to Memo1.Lines.Count do begin posL:=pos(Edit1.Text,Memo1.Lines[i]); if posL <>0 then begin posM:=0; for j:=0 to i-1 do posM:=posM+length(Memo1.Lines[j]); posM:=posM+(i*2); posM:=posM+posL-1; Memo1.SetFocus; Memo1.SelStart:=posM; Memo1.SelLength:=length(Edit1.Text); trouve:=true; ///////////// ici on recherche le le numéro de ligne ///////// NumeroLigne := SendMessage(Memo1.Handle,EM_LINEFROMCHAR,-1,0); edit2.Text:=(inttostr(NumeroLigne)); //Edit2: affiche le numéro de la ligne ///////////////////// break; end; if trouve=false then Edit2.Clear; end; end;
je vous mes le code de mes test car je suppose une mauvaise structure de mes conditions mais je tourne en rond depuis le W-E dernier alors que l'un d'entre vous verra certainement ma mauvaise logique et pourra me remettre sur le bon chemin.
Merci de vos lumières. Je ne programme pas fréquemment et c'est pas comme le vélo, j'oublie vite les automatismes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 Procedure TForm1.SearchHost_OnShow(Sender: TObject); var Import : String; FImport : TextFile; FHost : TextFile; StgImport : String; StgHost : String; // posM,posL,i,j:integer; trouve:boolean; NumeroLigne:integer; Yes : integer; begin Yes := 0; posM:=0; posL:=0; i:=0; j:=0; //OS = JvComputerInfoEx1.ProductName + ' - ' + JvComputerInfoEx1.VersionCSDString: JvLabel1.Caption := 'Votre version de Windows est ' + JvComputerInfoEx1.OS.ProductName + ' - ' + JvComputerInfoEx1.OS.VersionCSDString + ' ( Build : ' + IntToStr(JvComputerInfoEx1.OS.VersionBuild) + ' )'; //JvOSVersionInfo. JvMemo1.Clear; //Efface le contenu de Memo1 JvLabel2.Caption := ''; //Lecture du fichier import AssignFile(FImport,ExtractFilePath(Application.ExeName)+'import.txt'); {$I-} //La vérification d'E/S est désactivée Reset(FImport); {$I+} //La vérification d'E/S est activée if IoResult=0 then //Renvoie l'état de la dernière opération d'E/S begin Readln(FImport,StgImport); //Lit une ligne du fichier texte jusqu'au prochain saut de ligne JvLabel2.Caption := 'Lecture des données : ' + StgImport; //Affiche dans Memo1 le contenu de la variable Stg JvLabel3.Caption := 'Texte à ajouter : ' + StgImport; CloseFile(FImport); //Regarde si la ligne à ajouter est présente dans le fichier host. //Ouverture et lecture du fichier Host. AssignFile(FHost,JvComputerInfoEx1.Folders.System +'\drivers\etc\hosts'); Reset(FHost); repeat //Repeter... Readln(FHost,StgHost); //Lit une ligne du fichier texte jusqu'au prochain saut de ligne JvMemo1.Lines.Add(StgHost); //Affiche dans Memo1 le contenu de la variable Stg //JvRichEdit1.Lines.Add(StgHost); //AdvMemo1.Lines.Add(StgHost); until EOF(FHost);// ...jusqu'à ce que la position en cours du pointeur se trouve en fin de fichier CloseFile(Fhost); NumeroLigne :=0; RzGroupBox1.enabled := False; RZGroupBox2.Enabled := True; for i:=0 to JvMemo1.Lines.Count do begin posL:=pos(JvLabel2.Caption,JvMemo1.Lines[i]); if posL <>0 then begin posM:=0; for j:=0 to i-1 do posM:=posM+length(JvMemo1.Lines[j]); posM:=posM+(i*2); posM:=posM+posL-1; JvMemo1.SetFocus; JvMemo1.SelStart:=posM; JvMemo1.SelLength:=length(JvLabel2.Caption); trouve:=true; ///////////// ici on recherche le le numéro de ligne ///////// NumeroLigne := SendMessage(JvMemo1.Handle,EM_LINEFROMCHAR,-1,0); JvLabel4.Caption:=(inttostr(NumeroLigne)); //Edit2: affiche le numéro de la ligne ///////////////////// break; If NumeroLigne <>0 then begin //JvLabel4.Caption:= 'Ce texte apparait à la ligne '+ (inttostr(NumeroLigne))+ '. Souhaitez-vous le supprimer ?'; //Edit2: affiche le numéro de la ligne RzGroupBox1.Enabled := False; RzGroupBox2.Enabled := True; JvBitBtn5.Enabled := False; end else begin //JvLabel4.Caption:= 'Ce texte n''a pas été trouvé. Souhaitez-vous l''ajouter ?'; RzGroupBox1.Enabled := True; JvBitBtn2.Enabled := False; RZGroupBox2.Enabled := False; end; end Else begin JvLabel2.Caption := 'Fichier texte non trouvé. Contactez moi par mail, SVP'; JvLabel3.Caption := ''; JvLabel4.Caption := ''; end; end; end; end;
François
Partager