RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 octobre 2008
-
21 août 2008 à 15:03
RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 octobre 2008
-
31 août 2008 à 11:02
Bon je comprends rien aux threads apparament,
Voilà mon code que j'utilise aujourd'hui qui me pause problème
La gauge se mets bien à jour mais pas mon caption qui tout le temps à 0.
Pour le moment je fais cela dans OnTimer, j'ai essayer de voir comment faire avec un Thread, mais je ne c'est pas quoi mettre dans execute, quoi synchronizé etc..
De plus je crois qu'il ne faus pas utilisé de timer dans ce cas, alors où je mets l'exection de ma procedure.
Mon code dans un Form
procedure TFormProgressBar3.FormActivate(Sender: TObject);
begin
Timer1.Enabled := True;
end;
procedure TFormProgressBar3.FormCreate(Sender: TObject);
begin
NbRecord:= ModuleDeDonnee.ADOCalendrier.Recordset.RecordCount;
Timer1.Enabled := False;
end;
procedure TFormProgressBar3.Timer1Timer(Sender: TObject);
Var
i: Integer;
Panel: TPanel;
begin
with Gauge1 do Begin
MinValue:= 0;
MaxValue:= NbRecord;
Progress :=0;
end;
for i:= 0 to (NbRecord -1) do
Begin
Panel := TPanel.Create(FormPrincipal);
Panel.Font.Size := 6;
Panel.Font.Name := 'Arial';
Panel.Ctl3D := true;
Panel.Name := 'PANEL' + ModuleDeDonnee.ADOCalendrier.Fields.Fields[31].AsString;
Panel.Caption := '';
Panel.Top := StrToInt(ModuleDeDonnee.ADOCalendrier.Fields.Fields[28].AsString);
Panel.left := StrToInt(ModuleDeDonnee.ADOCalendrier.Fields.Fields[25].AsString);
Panel.Height := StrToInt(ModuleDeDonnee.ADOCalendrier.Fields.Fields[22].AsString);
Panel.Color := StringToColor(ModuleDeDonnee.ADOCalendrier.Fields.Fields[20].AsString);
Panel.Width := StrToInt(ModuleDeDonnee.ADOCalendrier.Fields.Fields[30].AsString);
Panel.Parent := FormPrincipal.StringGridSemaine;
Panel.PopupMenu := FormPrincipal.PopupMenu1;
Panel.OnDblClick := FormPrincipal.PanelDblClick;
Panel.ParentBackground := False;
Panel.Hint := ModuleDeDonnee.ADOCalendrier.Fields.Fields[23].AsString;
Panel.ShowHint := True;
ModuleDeDonnee.ADOCalendrier.Next;
Gauge1.Progress := Gauge1.Progress + 1; <- ca se mets a jour
StatusBar1.Panels[1].Text := IntToStr(i); <- CA RESTE à 0
end;
ModuleDeDonnee.ADOCalendrier.Filtered := false;
ModuleDeDonnee.ADOCalendrier.close;
Self.Close;
end;
RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 octobre 2008 25 août 2008 à 09:01
Bonjour Yves,
le Create Panel me permet de mettre en place un certain nombre de panel sur ma form.
La statusBar compontre 4 item, mon souhait c'est que le 1 donc, affiche au fur et a mesure le nombre de panel.
exemple j'ai 300 panel à pauser, dans la Statusbar on affiche de 0 à 300.
Voilà.
Vous n’avez pas trouvé la réponse que vous recherchez ?
yvemoreau
Messages postés308Date d'inscriptionmardi 11 juin 2002StatutMembreDernière intervention26 septembre 2008 25 août 2008 à 22:43
ok
for i:= 0 to (NbRecord -1) do
Begin
Panel := TPanel.Create(FormPrincipal);
Panel.parent:=FormPrincipal;
Panel.tag:= i;
...
StatusBar1.Panels[ Panel.tag].Text : = IntToStr(i); <- CA RESTE à 0
ouais c'est louche !!!
for i:= 0 to (NbRecord -1) do
Begin
//si le composant existe déjà ?
if not(Assigned('PANEL' + ModuleDeDonnee.ADOCalendrier.Fields.Fields[31].AsString)then
begin
Panel := TPanel.Create(FormPrincipal);
Panel.parent:=FormPrincipal;
Panel.tag:= i;
end;
...
StatusBar1.Panels[ Panel.tag].Text : = IntToStr(i); <- CA RESTE à 0
bref j'suis pas sure mais bon surtout pas oublier
FormOnclose....
for i:= 0 to (NbRecord -1) do
Begin
FreeAndNil('PANEL' + ModuleDeDonnee.ADOCalendrier.Fields.Fields[31].AsString);
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 28 août 2008 à 23:30
Bonjour Yve,
Pour info : inutile de libérer de manière explicite les composants Panelxxx puisque la fiche principale en est le propriétaire (Panel := TPanel.Create(FormPrincipal);) sauf si tu souhaites les détruire sans passer par la fermeture de la fiche. CQFD
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 30 août 2008 à 15:54
@RURUInc : je ne parle pas de la création des composants mais de leur destruction qui sera réalisée naturellement par le composant passé en argument au constructeur de l'instance de TPanel. Or, le propriétaire est toujours responsable de la destruction de ce qu'il possède avant d'être détruit à son tour (par l'objet Application, par exemple, quand il s'agit d'un fiche). Si tu dois concevoir des composants, n'oublie jamais cela.
May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
RURUInc
Messages postés42Date d'inscriptionjeudi 21 février 2008StatutMembreDernière intervention21 octobre 2008 31 août 2008 à 11:02
Je comprends ce que tu veux dire.
Je détruit mes composants dans certaine condition (changement de semaine, suppression salarié)
Mes panels ce créer dans un STringGrid (par dessus) dans la formprincipal.
Mon StringGrid est dans un TabSheet également (ce qui me permet de le rendre invisble si je clique dans le menu a prorpié.
quand je ferm ma form principal je fais cela :
procedure TFormPrincipal.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
application.Terminate;
end;
Quand je change de semaine ou suppression salarié (si le tabsheet est visible) je vais cela :
procedure TFormPrincipal.VidageDuStringGrid;
Var
n: Integer;
Begin
if LesPanels then
begin
if NbRecord > 0 then
Begin
StatusBar1.Panels[3].Text := 'Vidage des Tâches';
Application.ProcessMessages;
with ProgressBarPrincipal do
Begin
Visible := True;
Min:= 0;
Max:= FormPrincipal.ComponentCount;
Position :=0;
Parent := StatusBar1;
SetBounds((StatusBar1.Panels[0].Width+StatusBar1.Panels[1].Width)
,4,StatusBar1.Panels[2].Width-2,StatusBar1.Height-10);
end;
With FormPrincipal do
Begin
For n := ComponentCount-1 downto 0 do // Le faire Absolument à l'envers
Begin
if (components[n] is TPanel)
And (Components[n].Name <> 'PanelPlanning')
And (Components[n].Name <> 'PanelCalendrier')
And (Components[n].Name <> 'PanelBasCalendrier') Then
Begin
(Components[n] As TPanel).free;
end;
ProgressBarPrincipal.Position := ProgressBarPrincipal.Position + 1;
end;
end;
end;
StatusBar1.Panels[3].Text := '';
ProgressBarPrincipal.Visible:= False;
end;
end;
Ensuite je le créer par raport à ce que j'ai mis au dessus.