cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 2010
-
14 juil. 2009 à 20:20
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 2010
-
17 juil. 2009 à 10:55
Bonsoir, exemple, Tlabel.create(self);
.Parent:=...
.Name:= ...
Ce que je cherche c'est la suite, comment enregistré la form, comme fait l'assistant Delphi, Merci.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 15 juil. 2009 à 20:24
Nan mais en fait ce qu'il cherche à faire c'est par exemple quitter l'application avec un bouton en coordonnées (X;Y) et que quand il réouvre la fiche le bouton se trouve exactement au même endroit. Je crois. Pour cela il existe les WriteComponentResFile et ReadComponentResFile.
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 15 juil. 2009 à 01:39
Bonsoir foxi, ma question est bien claire, pour créer des composants, les libérer les détruires, tous le monde sais ou presque le faire..., mais enregistrer les composants sur une form, et la réutiliser comme fais l'assistant là moi je coince. que cet ensemble de composant devient .pas avec son .dcu etc... Merci monsieur Foxi.
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 15 juil. 2009 à 21:55
Bonsoir Cantador, je coince dans une simple boucle, si tu veux je t'envois la source... pour que tu m'aide un peux. (c'st incroyable, puisque j'utilise le timer pour incrémenter!) merci.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 15 juil. 2009 à 22:15
hou avec tout le beau monde qu'il y a ce soir, je t'invite à poser ta question tout de suite sur le forum..
On va se battre afin de te répondre...
Nous serons les matadors à côté du picadore !
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 15 juil. 2009 à 23:44
Re-Bonsoir cantador,
procedure TMain.Timer1Timer(Sender: TObject);
var
JourActuel, JourEventuel: string;
t : string;
begin
{ Attention la valeur du timer limite le nombre d'entrées
Selon la valeur de timer.timer}
if ListView1.Items.Count >= 1 // Evite de boucler dans le vide et générer des erreurs;
then
begin
JourActuel := IntToStr(DayOfTheWeek(Date)); //(Fixer le jour de début de semaine, et puis le 1er jour est 1,....
JourEventuel := Copy(listview1.Items[ii-1].Caption, 1, 1); // juste pour récupérer un nbr caractères, dans une chaine à partir d'une
// position
t:=h (strtodatetime(listview1.Items[ii-1].SubItems[0]), false); // avec false, notre fonction ne tiens pas compte des seconde
Case StrToInt(JourEventuel) Of
0 : RESULT := True; // Tous les jours ...
1..7 : begin RESULT :jourActuel joureventuel; end ; // Un des 7 jours ...
8 : begin RESULT := StrToInt(JourActuel) In [1..5] ; end ; // Jours ouvrables
9 : begin RESULT :=StrToInt(JourActuel) In [6..7]; end ; // Week-end
End;
if listview1.Items[ii-1].Checked then
if t=h(now, false) then
if result then
begin
AlertMsgBox('x','y',3,true ); // c de Ni69
end;
if ii=ListView1.Items.Count then
ii:=1 else ii:=ii+1; // Pas besoin de boucle...
// le timer l'incrémente tous les 3000 ms !!!
// Vérification au passage (toujours au carrefour des if)
// item(valeur) est égale au jour < comparaison en integer>,
Application.ProcessMessages ; // Evite tous problèmes de pile, de fixation, bonne scrutation des threads
end ;
end;
Le problème c'est que à la place d'appeler la procédure de ni69 et je fais par exemple une fenetre modal, tous marche bien, la la fonction de ni69, continue à se répercuter jusq'à la fin de la minute! si j'agrandis la valeur du timer, je réduis énormément le nombre d'entre dans mon listview. Bon courage.
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 16 juil. 2009 à 00:35
Je ne comprends pas bien ton problème ? Que veux-tu faire ?
Cordialement, Bacterius !
PS : en passant je teste la balise de code ^^ :
for I := 1 to 7 do
begin
Application.ProcessMessages;
try
Inc(A);
B := A xor (B shl $2);
CloseHandleEx(H, CH_FORCE or CH_IGNORE);
except
raise Exception.Create('Erreur !');
end;
end;
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 16 juil. 2009 à 00:51
Bonsoir Bactérius, on est d'accord qu'il y 3 types de boucles, pour inteval(for) pour pointeur(repeat)et(le while) test pour entrer et exige une incrémentation, mais là c'est une boucle qui se trouve enprisonné dans un timer, et qui se répète, et la valeur (minute) jouent en quelque sorte l'incrémentation, et non la valeur du timer.timer, avec la source vous verrez mieux le problème, malgré que dans le listview, il ya un champ booléan, vous verrez que le champ booléen change est à false et la procedure continue à s'exécuter... donnez moi ou je puisse l'envoyer la source, c'est un vrai casse, (ps: pour la solution il faut tous trucage du genre, directive de compilation. Merci
Bacterius
Messages postés3792Date d'inscriptionsamedi 22 décembre 2007StatutMembreDernière intervention 3 juin 201610 16 juil. 2009 à 00:56
Il existe trois types de boucle :
- boucle for..do : itérative finie
- boucle while..do : itérative indéfinie avec test pré-entrée
- boucle repeat..do : itérative indéfinie sans test pré-entrée
Et utiliser la minute n'a aucun sens pour l'incrémentation, suffit de changer l'heure et hop c'est mort. Utilise plutot 1 timer qui se répète toutes les 1 minute (60.000 millisecondes), ça sera déjà plus simple. Mais j'ai toujours pas compris ...
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 16 juil. 2009 à 01:04
Bsr, même après avoir changé l'heure le timer continue toujour... crois moi sans la source, tu n'observera pas le fond de la question, c'est comme un point noir, tu entre et c impossible d'ensortir de cette boucle, et fais toutes les condition... c un coup d'épée dans l'eau, il te faut la source pour voir le fond du problème. Merci Bactérieus.
cavalier2400
Messages postés120Date d'inscriptionmardi 8 juillet 2008StatutMembreDernière intervention 1 décembre 20101 16 juil. 2009 à 09:41
1. ajouter à nouveau projet ni69
modifier la condition
ClientHeight=OGhigh --> ClientHeight>OGhigh
2.ajouter une form.mane main
avec un listeview et le reste des composants...
3. Vous aller constater qu'aucune condition ne te permettra de sortir de cette boucle timer?
{ Déclarations Privées }
public
{ Déclarations Publiques}
end;
var
Main: TMain;
result: boolean; //résultat de la recheche
path_prg,x,y:string; // Enplacement du rep de l'application
pos,ii,z, fois: integer; // pos: ptr / ii: le Item / z: Val de l'icone
implementation
uses Unit2, AlertMsg;
{$R *.dfm}
procedure sauvegarde(var listview1:tlistview);
var i: integer;
begin
main.timer1.Enabled :=false;
if fileexists(path_prg+'events.cfg') then WriteComponentResFile(path_prg+'events.cfg', listview1);
for i:=0 to listview1.Items.Count -1 do
listview1.Items[i].Checked:=true;
main.timer1.Enabled :=true;
listview1.SetFocus ;
end;
procedure affiche() ;
var i :integer;
begin
main.OpenDialog1.Filter :='Fichiers texte (*.cfg)|*.cfg' ;
if fileexists(path_prg+'events.cfg') then readComponentResFile(path_prg+'events.cfg', main.listview1);
// Restore fiablement le composant
with main do
begin
listview1.Columns.Items[0].Width :=200; // largeur des items <colums>
listview1.Columns.Items[1].Width :=100;
listview1.Columns.Items[2].Width :=300;
If ListView1.Items.Count = 0 Then Exit;
for i:=0 to ListView1.Items.Count -1 do {On vire 1 car on commence à 0 - tjs qd ça commence par 0 , ça finit par -1}
begin
listview1.Items.Item[i].Checked := true;
end;
end;
end;
procedure TMain.ExempleOfCalledProc(Sender: TObject); // Notez la présence indispensable du seul et unique paramètre (Sender: TObject)
begin
ShowMessage('Vous avez cliqué sur le message !!')
end;
function H(D: TDateTime; S : Boolean) : String;
var
Ho, Min, Sec, Msec : Word;
heure : String;
Minute : String;
Seconde : String;
begin
Decodetime(D, Ho, Min, sec, Msec);
Heure := IntToStr(Ho);
Minute := IntToStr(min);
Seconde := IntToStr(Sec);
If Length(heure) = 1 Then heure := '0' + heure;
If Length(Minute) = 1 Then Minute := '0' + Minute;
If Length(Seconde) = 1 Then seconde := '0' + Seconde;
If S
Then RESULT := heure + ':' + Minute + ':' + seconde
Else RESULT := Heure + ':' + Minute;
end;
procedure TMain.Button1Click(Sender: TObject);
var ListAjout : TListItem;
begin
timer1.Enabled :=false;
If evenement.text <>'' then
begin
ListAjout := ListView1.Items.add;
ListAjout.ImageIndex :=z;
ListAjout.Caption := evenement.Text ;
listAjout.Checked :=true;
ListAjout.SubItems.Add(formatdatetime('HH:mm' , datetimepicker1.Time ));
if edesc.Text =''then edesc.Text :='Réservé';
ListAjout.SubItems.Add(edesc.Text);
sauvegarde(listview1);
end
else showmessage('Choisir le/les jours de semaine');
timer1.Enabled :=true;
end;
procedure TMain.EffaerlaLigneselectionne1Click(Sender: TObject);
begin
ListView1.DeleteSelected;
sauvegarde(listview1);;
end;
procedure TMain.Quelleligneestslctionne1Click(Sender: TObject);
begin
if ListView1.ItemIndex = -1 Then
begin
showmessage( 'Pas de Ligne séléctionnée');
exit;
end;
showmessage( 'La Ligne ' + IntToStr(ListView1.ItemIndex + 1) + ' est sélectionnée');
end;
procedure TMain.Lirelalignesellectione1Click(Sender: TObject);
var index :integer;
begin
index := listview1.ItemIndex;
if index = -1 then
begin
MessageBoxA(handle, 'Vous devez selectionner une ligne !','erreur',MB_ICONSTOP);
exit;
end;
procedure TMain.ListView1Click(Sender: TObject);
var x: string;
begin
try
if listview1.ItemIndex >= 0 then
begin
z:= listview1.Items.Item[listview1.ItemIndex].ImageIndex ;
z:=z+1;
combobox1.ItemIndex :=z;
end
except
on e: exception
do
end;
ii:=1;
try
if listview1.ItemIndex >= 0 then
begin
x:=listview1.Items[listview1.ItemIndex].Caption;
// Intercept sur l'itemindex du timer et de l'utilisateur... si simultanément
if x='' then x:='0';
x:=x[1];
evenement.ItemIndex := strtoint(x);
datetimepicker1.Time :=strtotime( ListView1.Items[listview1.ItemIndex].SubItems.Strings[0]) ;
edesc.Text :=listview1.Items[listview1.ItemIndex].SubItems.Strings[1];
pos:= (ListView1.ItemIndex + 1);
label4.caption:='';
label4.Caption := IntToStr(ListView1.ItemIndex + 1) +'/'+IntToStr(ListView1.Items.Count)+' Evenements';
end;
except
on e: exception
do
end;
end;
procedure TMain.Button5Click(Sender: TObject);
var ListAjout : TListItem;
index :integer;
begin
index := listview1.ItemIndex;
if index <> -1 then
begin
index := listview1.ItemIndex;
ListView1.DeleteSelected;
ListAjout := ListView1.Items.Insert(index) ;
listview1.Items.Item[index].ImageIndex :=z;
ListAjout.Caption := evenement.Text ;
listAjout.Checked :=true;
ListAjout.SubItems.Add(formatdatetime('HH:mm' , datetimepicker1.Time ));
ListAjout.SubItems.Add(edesc.Text);
sauvegarde(listview1) ; //sauvegarde
listview1.ItemIndex :=index;
end;
end;
procedure TMain.ListView1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var x: string;
begin
try
if listview1.ItemIndex >= 0 then
begin
x:=listview1.Items[listview1.ItemIndex].Caption;
// Intercept sur l'itemindex du timer et de l'utilisateur... si simultanément
if x='' then x:='0';
x:=x[1];
evenement.ItemIndex := strtoint(x);
datetimepicker1.Time :=strtotime( ListView1.Items[listview1.ItemIndex].SubItems.Strings[0]) ;
edesc.Text :=listview1.Items[listview1.ItemIndex].SubItems.Strings[1];
pos:= (ListView1.ItemIndex + 1);
label4.caption:='';
label4.Caption := IntToStr(ListView1.ItemIndex + 1) +'/'+IntToStr(ListView1.Items.Count)+' Evenements';
end;
except
on e: exception
do
end;
end;
procedure TMain.Button7Click(Sender: TObject);
begin
timer1.Enabled :=false;
close;
end;
procedure TMain.Timer1Timer(Sender: TObject);
var
JourActuel, JourEventuel: string;
t : string;
begin
{ Attention la valeur du timer limite le nombre d'entrées
Selon la valeur de timer.timer}
if ListView1.Items.Count >= 1 // Evite de boucler dans le vide et générer des erreurs;
then
begin
JourActuel := IntToStr(DayOfTheWeek(Date)); //(Fixer le jour de début de semaine, et puis le 1er jour est 1,....
JourEventuel := Copy(listview1.Items[ii-1].Caption, 1, 1); // juste pour récupérer un nbr caractères, dans une chaine à partir d'une
// position
t:=h (strtodatetime(listview1.Items[ii-1].SubItems[0]), false); // avec false, notre fonction ne tiens pas compte des seconde
Case StrToInt(JourEventuel) Of
0 : RESULT := True; // Tous les jours ...
1..7 : begin RESULT :jourActuel joureventuel; end ; // Un des 7 jours ...
8 : begin RESULT := StrToInt(JourActuel) In [1..5] ; end ; // Jours ouvrables
9 : begin RESULT :=StrToInt(JourActuel) In [6..7]; end ; // Week-end
End;
if listview1.Items[ii-1].Checked then
if t=h(now, false) then
if result then
begin
AlertMsgBox('x','y',3,true ); // c de Ni69
end;
if ii=ListView1.Items.Count then
ii:=1 else ii:=ii+1; // Pas besoin de boucle...
// le timer l'incrémente tous les 3000 ms !!!
// Vérification au passage (toujours au carrefour des if)
// item(valeur) est égale au jour < comparaison en integer>,
Application.ProcessMessages ; // Evite tous problèmes de pile, de fixation, bonne scrutation des threads
end ;
end;
procedure TMain.FormActivate(Sender: TObject);
begin
Path_Prg := ExtractFileDir(ParamStr(0)) + '\';
affiche();
ii:=1; // items (valeur de la ligne), tandis que les item, et subItem ce sont les colonne <colums>
timer1.Enabled :=true; //
z:=0; //Aucune icone
datetimepicker1.Format :=('HH:mm');
end;
procedure TMain.ComboBox1Change(Sender: TObject);
var val_ico:string;
begin
if combobox1.Text <> '' then
begin
val_ico:=combobox1.Text;
// recupérer les 02 premier caractère (mt Tableau)
val_ico:=val_ico[1]+val_ico[2];
z:=strtoint(val_ico)-1;
end;
end;
procedure TMain.ListView1CustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
(*
if item.Index mod 2= 1 then
begin
with ListView1.Canvas.Brush do *)
with ListView1.Canvas.Brush do
begin
case (Item.Index mod 2) of
0: Color := $00EBE1DA;
1: Color :=$00C5DEC5;// $00AAE1DD;//16777215;
end;
end;
end;
procedure TMain.FormCanResize(Sender: TObject; var NewWidth,
NewHeight: Integer; var Resize: Boolean);
begin
SetWindowRgn(main.handle,CreateRoundRectRgn(0,0,main.Width,main.Height,16,16),true);
end;
procedure TMain.ToolButton3Click(Sender: TObject);
begin
ListView1.Clear;
sauvegarde(listview1) ;
end;