Nevra Nur Yazdı:
Merhabalar, Clomosy üzerinde geliştirmekte olduğum Wordle benzeri bir kelime oyununda, 5x5'lik bir matrisi for döngüsü ile dinamik olarak oluşturuyorum. Kullanıcı ilk satırı doldurup butona bastığında verileri başarıyla okuyabiliyorum. Ancak CurrentRow değişkenini artırıp ikinci satıra geçtiğimde, kullanıcı görsel olarak kutucukları doldurmuş olmasına rağmen kod tarafında LocalTargetEdit.Text değeri boş olarak dönüyor. Bileşenlere şu şekilde erişiyorum:
LocalTargetEdit = MyForm.clFindComponent('Edit_' + IntToStr(CurrentRow) + '_' + IntToStr(k));
var MyForm: TclForm; WordToGuess, CurrentCompName: String; CurrentRow, i, j: Integer; HintLabel: TclLabel; MainGridContent: TclLayout; RowLayout: TclLayout; TempEdit,TargetEdit: TclProEdit; CheckBtn: TClProButton; void CheckGuess; var Letter, TargetLetter, CurrentUserGuess,CheckText: String; k: Integer; IsWin: Boolean; LocalTargetEdit: TclProEdit; { CurrentUserGuess = ''; IsWin = True;
for (k = 1 to 5) { LocalTargetEdit = MyForm.clFindComponent('Edit_' + IntToStr(CurrentRow) + '_' + IntToStr(k)); CheckText = Trim(LocalTargetEdit.Text); if (CheckText == '') { ShowMessage('Hata: ' + IntToStr(CurrentRow) + '. satır, ' + IntToStr(k) + '. kutucuk boş!'); Exit; } CurrentUserGuess = CurrentUserGuess + UpperCase(CheckText); }
for (k = 1 to 5) { Letter = Copy(CurrentUserGuess, k, 1); TargetLetter = Copy(WordToGuess, k, 1); LocalTargetEdit = MyForm.clFindComponent('Edit_' + IntToStr(CurrentRow) + '_' + IntToStr(k)); if (Letter == TargetLetter) { LocalTargetEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#3cb187'); } else if (Pos(Letter, WordToGuess) > 0) { LocalTargetEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#c9b458'); IsWin = False; } else { LocalTargetEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#787c7e'); IsWin = False; } LocalTargetEdit.SetclProSettings(LocalTargetEdit.clProSettings); LocalTargetEdit.ReadOnly = True; }
if (IsWin == True) { ShowMessage('✓ Tebrikler! Doğru kelime: ' + WordToGuess); } else { if (CurrentRow >= 5) { ShowMessage('X Maalesef tüm hakların bitti! Kelime: ' + WordToGuess); } else { CurrentRow = CurrentRow + 1; ShowMessage(IntToStr(CurrentRow) + '. denemeye geçtiniz!'); } } }
{ MyForm = TclForm.Create(Self); WordToGuess = 'KÖPEK'; CurrentRow = 1;
HintLabel = MyForm.AddNewLabel(MyForm, 'HintLabel', 'İpucu: Bir Hayvan'); HintLabel.Align = alTop; HintLabel.Margins.Top = 30; HintLabel.Margins.Left = 20; HintLabel.TextSettings.Font.Size = 18;
MainGridContent = MyForm.AddNewLayout(MyForm, 'MainGridContent'); MainGridContent.Align = alCenter; MainGridContent.Width = 320; MainGridContent.Height = 350;
for (i = 1 to 5) { RowLayout = MyForm.AddNewLayout(MainGridContent, 'Row' + IntToStr(i)); RowLayout.Align = alTop; RowLayout.Height = 60; RowLayout.Margins.Bottom = 8;
for (j = 1 to 5) { CurrentCompName = 'Edit_' + IntToStr(i) + '_' + IntToStr(j); TempEdit = MyForm.AddNewProEdit(RowLayout, CurrentCompName, ''); TempEdit.Align = alLeft; TempEdit.Width = 55; TempEdit.Margins.Left = 5; TempEdit.MaxLength = 1; TempEdit.clProSettings.FontSize = 22; TempEdit.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); TempEdit.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#333333'); TempEdit.clProSettings.RoundHeight = 2; TempEdit.clProSettings.RoundWidth = 2; TempEdit.clProSettings.IsFill = True; TempEdit.clProSettings.IsRound = True; TempEdit.SetclProSettings(TempEdit.clProSettings); } }
CheckBtn = MyForm.AddNewProButton(MyForm, 'CheckBtn', 'TAHMİN ET'); CheckBtn.Align = alBottom; CheckBtn.Height = 50; CheckBtn.Margins.Bottom = 20; CheckBtn.Margins.Left = 50; CheckBtn.Margins.Right = 50;
CheckBtn.clProSettings.BackgroundColor = clAlphaColor.clHexToColor('#3cb187'); CheckBtn.clProSettings.FontColor = clAlphaColor.clHexToColor('#ffffff'); CheckBtn.clProSettings.FontSize = 14; CheckBtn.clProSettings.TextSettings.Font.Style = [fsBold]; CheckBtn.clProSettings.RoundHeight = 15; CheckBtn.clProSettings.RoundWidth = 15; CheckBtn.clProSettings.IsFill = True; CheckBtn.clProSettings.IsRound = True; CheckBtn.SetclProSettings(CheckBtn.clProSettings);
MyForm.AddNewEvent(CheckBtn, tbeOnClick, 'CheckGuess');
MyForm.Run;
} CurrentRow değeri doğru şekilde 2 oluyor. Bileşen (Edit_2_1, Edit_2_2 vb.) başarıyla bulunuyor .Ancak kullanıcı içine harf yazmış olsa bile LocalTargetEdit.Text içeriği boş görünüyor. Kullanıcı kutucuktan çıkış yapmadığında veya odak değişmediğinde veri belleğe işlenmiyor gibi görünüyor. < defer="" ="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28on72PdrCzSjY4U6VaAw1EQ==" -cf-beacon=""version":"2024.11.0","token":"439455f3e46c40b98dbd42a2f1a954d8","r":1,"_timing":"name":"cfCacheStatus":true,"cfEdge":true,"cfExtPri":true,"cfL4":true,"cfOrigin":true,"cfSpeedBrain":true,"location_startswith":null" crossorigin="anonymous">
|