Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Tanımladığım record içindeki alanlardan biri ile ilgili sorun
#1
Öncelikle herkesin geçmiş berat kandilini kutluyor herkes için sağlık mutluluk ve huzur getirmesini diliyorum. 
Vatanımız ve milletimizi için daha güzel günler getirmesini diliyorum.

Ufak bir konu hakkında yardımınızı rica ediyorum. Tanımladığım bir record ile sorun yaşıyorum. Aşağıda resim ve kod parçaları ile anlatmaya çalışacağım umarım başarabilirim.

Masa sistemi bu şekilde sipariş için tıklandığında süreyi saymaya başlıyor.

QNw7OG.jpeg

sorun şu ki süre yazması için işaretlediğim ve sonradan oluşturduğum "labelTime"  değişkenine değilde panelin-caption değerine yazıyor  , sorunsuz da çalışıyor fakat yazması gereken alan belirttiğim gibi "Labeltime" değişkeni  bu konuda yardım rica ediyorum.


Panel için tanımladığım record tanımı
   Var
   Panels : array of record
     Panel     : TRzPanel ;
     Timer     : TTimer ;
     StartTime : TDateTime ;
     Labeltime : TLabel ;
   end;


Masaların yüklendiği kısım
 TabSheet := TabControl.FindComponent(TabName) as TTabSheet;
 if  Assigned(TabSheet) then
    TabControl.Pages[TabSheet.PageIndex].Free ;

 TabSheet := TTabSheet.Create(TabControl);
 TabSheet.Name := TabName ;
 TabSheet.PageControl := TabControl;
 TabSheet.Caption := TabCaption ;

 SetLength(Panels, PanelCount);

 sSQlTmp := ' SELECT * FROM Masatanimlari WHERE tabname='+Quotedstr(tabname) + ' order By masaid '  ;
 SQlServerDb('R',DataList.adoMasa1,sSQlTmp);
 With datalist.adoMasa1 do begin
   Repeat
     i:= recno-1;
     Panels[i].Panel     := TPanel.Create(TabSheet);
     Panels[i].Panel.Width          := PanelWidth;
     Panels[i].Panel.Height         := PanelHeight;             
     Panels[i].Panel.Left           := i * PanelWidth;          
     Panels[i].Panel.Color          := Fieldbyname('masarenk').Value ;
     Panels[i].Panel.Font.Name      := 'Exo';
     Panels[i].Panel.Font.Color     := Fieldbyname('yazirenk').Value ;
     Panels[i].Panel.Font.Size      := Fieldbyname('yaziboy').Value ;
     Panels[i].Panel.Left           := Fieldbyname('soldan').Value ;          
     Panels[i].Panel.Top            := Fieldbyname('yukardan').Value ;
     Panels[i].Panel.Tag            := Fieldbyname('masaid').Value ;
     Panels[i].Panel.Caption        := Fieldbyname('masano').AsString ;

     Panels[i].LabelTime       := TLabel.Create(Panels[i].Panel);
     Panels[i].LabelTime.Name       := 'LabelTime'+inttostr(i);
     Panels[i].LabelTime.Parent     := Panels[i].Panel;
     Panels[i].LabelTime.Caption    := '00:00';
     Panels[i].LabelTime.Font.Name  := 'calibri';
     Panels[i].LabelTime.Align      := alBottom ;
     Panels[i].LabelTime.Alignment  := taCenter ;
     Panels[i].LabelTime.Font.Size  := 10 ;
     Panels[i].LabelTime.Font.Color := clWhite;

     Panels[i].Panel.Parent := TabSheet;
     Panels[i].Panel.OnClick := PanelOnClick ;
     Next;
   Until Eof;
 end;


Bu şekilde de denedim ama yine sonuç aynı çalışmadı sayıyor fakat labeltime.caption değerine yazmıyor.

procedure TRestoran.TimerTick(Sender: TObject);
var
 i: Integer;
 LabelTime: TLabel;
begin
 for i := Low(Panels) to High(Panels) do
 begin
   if Panels[i].Timer = Sender then
   begin
     LabelTime := Panels[i].Panel.FindComponent('LabelTime') as TLabel;
     if Assigned(LabelTime) then
       LabelTime.Caption := FormatDateTime('nn:ss', Now - Panels[i].StartTime);

     Label2.Caption := FormatDateTime('nn:ss', Now - Panels[i].StartTime);   // aslında bu şekilde acaba sayamıyormu diye eklediğimde saydığını görüyorum.
     Panels[i].panel.Caption := FormatDateTime('nn:ss', Now - Panels[i].StartTime);   // Panel e atama yaptığımda çalışıyor.   aşağıdaki resimdeki gibi.

     Break;
   end;
 end;
end;


QN0CUq.jpeg


Veya bu şekilde denediğimde de yine aynı durum Panel.caption için atama yapınca çalışıyor.

procedure TRestoran.TimerTick(Sender: TObject);
var
 i: Integer;
begin
 for i := Low(Panels) to High(Panels) do
 begin
   if Panels[i].Timer = Sender then
   begin
     Panels[i].Panel.Caption := FormatDateTime('nn:ss', Now - Panels[i].StartTime);  // Bu Şekilde sorunsuz çalışıyor fakat Panel - caption değerine yazıyor 

     Panels[i].labelTime.Caption := FormatDateTime('nn:ss', Now - Panels[i].StartTime);  // istediğim bu şekilde benim eklediğim labelTime - caption değerine yazmak 
                                                                                         // ama ne yaptıysan beceremedim. 

     Break;
   end;
 end;
end;


procedure TRestoran.PanelOnClick(sender:TObject) ;
var
 i: Integer;
 Panel: TPanel;
begin
 Panel := Sender as TPanel;

 // Panel için kaydedilmiş bir zamanlayıcı yoksa, yeni bir zamanlayıcı oluştur.
 for i := Low(Panels) to High(Panels) do
 begin
   if Panels[i].Panel = Panel then
   begin
     Panels[i].Timer.Enabled := not Panels[i].Timer.Enabled;
     Exit;
   end;
 end;

 SetLength(Panels, Length(Panels) + 1);
 i := High(Panels);

 Panels[i].Panel := Panel;
 Panels[i].StartTime := Now;
 Panels[i].Timer := TTimer.Create(nil);
 Panels[i].Timer.Interval := 1000;
 Panels[i].Timer.Enabled := True;
 Panels[i].Timer.OnTimer := TimerTick;

end;
Cevapla
#2
LabelTime := Panels[i].Panel.FindComponent('LabelTime') as TLabel;
Bu şekilde arıyorsun fakat aşağıdaki satırda ismi farklı giriyorsun.
Panels[i].LabelTime.Name       := 'LabelTime'+inttostr(i);

Panel Caption çalışıyor. Sebebi index ile bulduruyorsun. LabelTime çalışmıyor. Nedeni ise hatalı isimle arama yapıyorsun. Index numarasını da ekleyerek FindComponent yaparsan çalışacaktır.
LabelTime := Panels[i].Panel.FindComponent('LabelTime' + IntToStr(i)) as TLabel;
PostgreSQL - Linux - Delphi, Poliüretan
WWW
Cevapla
#3
(07-03-2023, Saat: 11:43)3ddark Adlı Kullanıcıdan Alıntı:
LabelTime := Panels[i].Panel.FindComponent('LabelTime') as TLabel;
Bu şekilde arıyorsun fakat aşağıdaki satırda ismi farklı giriyorsun.
Panels[i].LabelTime.Name       := 'LabelTime'+inttostr(i);

Panel Caption çalışıyor. Sebebi index ile bulduruyorsun. LabelTime çalışmıyor. Nedeni ise hatalı isimle arama yapıyorsun. Index numarasını da ekleyerek FindComponent yaparsan çalışacaktır.
LabelTime := Panels[i].Panel.FindComponent('LabelTime' + IntToStr(i)) as TLabel;

Çok teşekkür ediyorum bilgilendirme için , aslında dediğiniz gibi   

Panels[i].LabelTime.Name       := 'LabelTime'+inttostr(i);
 

burdaki index e gerek yoktu zaten her panel üzerinde tek bir label vardı  , 
o kadar çok baktım ki yani görememiş olmamamı yanayım , bu kadar uzun süre uğraşmış olmamamı bilemedim :Sad

Çok teşekkürler.
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  AdoQuery ile ilgili bir sorun. (Çözüldü) Bay_Y 4 244 17-04-2024, Saat: 10:58
Son Yorum: Bay_Y
  Klasör İçindeki Resimleri Gösterme sadoal351 5 489 13-04-2024, Saat: 22:40
Son Yorum: sadoal351
  Plaka Tanıma Uygulamasındaki Sorun hk. delhici 9 3.197 03-01-2024, Saat: 09:44
Son Yorum: rabiasnlk
  Edit içindeki tarihin doğru olup olmadığını kontrol etmek? hasansavci 2 428 17-10-2023, Saat: 03:35
Son Yorum: mcuyan
  String Fonksiyon Kullanımıyla ilgili ermanispir@gmail.com 2 510 01-06-2023, Saat: 11:28
Son Yorum: ermanispir@gmail.com



Konuyu Okuyanlar: 1 Ziyaretçi