Tstringgrid -de hucre deyişimi

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
everrest
Üye
Mesajlar: 1
Kayıt: 28 Şub 2014 10:44

Tstringgrid -de hucre deyişimi

Mesaj gönderen everrest »

Meraba herkese
delphi 7-de sudoku oyunu (9x9) programlamak istiyorum
hangi hücrelerin hangi rakamları alacagini önceden kendim unit-e yaziyorum [sudokugrid1.cells[8,8]:=inttostr(2); sudokugrid1.cells[2,5]:=inttostr(9);]
programın calıştıgı zaman oyuncu tarafindan benim önceden verdiyim rakamların degişire bilmemesini ve yalnızca kendisi dahil ettiklerini edit, update, delete ede bilmesini yapa bilmiyorum. Ve oyuncunun hücrelere dahil etdiği rakamların renginin farklı olması gerekir
bu 2 konuda yardima ihtiyacim var bu sitede yazdım ama hala dogru bir cevap yok:
http://stackoverflow.com/questions/2208 ... 1_22092556
önceden teşşekkurler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Re: Tstringgrid -de hucre deyişimi

Mesaj gönderen mrmarman »

iki tane stringgrid koy ama birisi gizli olsun. Gizli olan stringgrid, görünür olanın maskesi olsun. Ne işe yarayacak ? Şöyle özetleyim.

(1) Eğer bir hücre click edilmişse, gizli olan stringgrid'deki hücreye göre; bu hücre projen tarafından doldurulmuşsa bu işlemi geri çevirebilirsin, kullanıcı girmişse edit işlemine müsaade edersin.

(2) Aynı şekilde canvas işlemleri ile eğer kullanıcı girmişse renklendirirsin, projen vermişse istediğin farklı şekilde renklendirirsin.

Özetle: maske olarak kullanacağın stringgrid'e başvurup ona göre davrandıracaksın. :idea:
Resim
Resim ....Resim
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Tstringgrid -de hucre deyişimi

Mesaj gönderen SimaWB »

everrest yazdı:Meraba herkese
delphi 7-de sudoku oyunu (9x9) programlamak istiyorum
hangi hücrelerin hangi rakamları alacagini önceden kendim unit-e yaziyorum [sudokugrid1.cells[8,8]:=inttostr(2); sudokugrid1.cells[2,5]:=inttostr(9);]
programın calıştıgı zaman oyuncu tarafindan benim önceden verdiyim rakamların degişire bilmemesini ve yalnızca kendisi dahil ettiklerini edit, update, delete ede bilmesini yapa bilmiyorum. Ve oyuncunun hücrelere dahil etdiği rakamların renginin farklı olması gerekir
bu 2 konuda yardima ihtiyacim var bu sitede yazdım ama hala dogru bir cevap yok:
http://stackoverflow.com/questions/2208 ... 1_22092556
önceden teşşekkurler.
Bence verdiğin linkteki kod harika! Sen sadece hangi hücreler başlangıçta dolduruluyor onları tutmak için bir değişken tanımla. Mesela:

Kod: Tümünü seç

Hucreler: array[0..8, 0..8] of Boolean;
şeklinde. Bulmacayı doldururken ilgili hücrelerin değerlerini True, boş olanları False atarsın.

Kod: Tümünü seç

sudokugrid1.cells[8,8]:=inttostr(2); 
sudokugrid1.cells[2,5]:=inttostr(9);
Hucreler[8,8] := True;
Hucreler[2,5] := True;
gibi...

Daha sonra verdiğin linkteki örneğe göre yazarsak:

Kod: Tümünü seç

procedure TForm5.StringGridCanEdit(Sender: TObject; Col, Row: Integer;
  var CanEdit: Boolean);
begin
  CanEdit := not Hucreler[Col, Row];
end;
Bu şekilde sadece Hucreler[Col, Row] = False ise içine bilgi yazılabilir.

Kullanıcının yazdığı hücrelerin font'unda değişiklik yapmak istiyorsan StringGrid'in OnDrawCell olayını kullanmalısın. Aşağıdaki örnekte kullanıcının değişiklik yapabileceği hücrelerin yazı rengi kırmızı yapılıyor:

Kod: Tümünü seç

procedure TForm5.sudokugrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  S: string;
begin
  S := sudokugrid1.Cells[ACol, ARow];
  if not Hucreler[ACol, ARow] then
  begin
    sudokugrid1.Canvas.Font.Color := clRed;
    sudokugrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 2, S);
  end;
end;
There's no place like 127.0.0.1
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Tstringgrid -de hucre deyişimi

Mesaj gönderen SimaWB »

Sudoku ile ilgili hazır kod istersen internette birçok Delphi ve Pascal örnekleri var. Oktay KOCATURK'ün daha önceden yaptığı ve kaynak kodlarıyla yayınladığı uygulamayı aşağıdaki sayfada bulabilirsin:
http://www.torry.net/pages.php?id=352
There's no place like 127.0.0.1
Cevapla