Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Array mi text mi ?
#1
Aşağıda resimde görülen yapıyı fmx projede, stringgrid ile oluşturmaya çalışıyorum. Bunun için bulduğum yöntemde tıkanıp kaldım. Hangisi doğru olur veya nasıl olmalı diye sizlere danışmak istedim. Bana yol gösterirseniz şimdiden teşekkürler.
Her kart içindeki bilgiyi bir dizi de tutup , gridi oluştururken  bu bilgileri eklerim dedim. Böylece gerektiğinde o dizi içinde aradığım rakam varmı yokmu bakabilirdim. Fakat sorun bu şekilde tam 135 adet global dizi  tanımlamam gerekiyordu. Bu kadar çok değişken kullanmak doğru bir yol mu, daha farklı nasıl yapabilirim?

Aklıma gelen ikinci yol ise 
Text bir dosyanın her satırında aşağıdaki şekilde bilgiyi saklar, örneğin iki nolu kart bilgisini okumak içinde text dosyanın ikinci satırını okuturum. Buradaki sorun text dosyasında istediğim satırı bulmak ve okumak. 
49- - - -16- -23-26-28- - - -44- -49- -58-59-61- - - -74-71-80-84-89-  


const
KART_1:array[0..26] of string =('1', 'boş', '23', 'boş', '44', 'boş', '61', 'boş', '80', 'boş', '16', '26', 'boş', ' boş', '58', 'boş', '74', '84', 'boş', 'boş ', '28', ' boş', '49', '59', ' boş', '71', '89');


Function TFANA.Grid_Ekle(asahibi: TVertScrollBox; kartNo: Integer  ): TStringGrid;
 var
 Kolon:TStringColumn;
 i,satir,sutun:Integer;
begin
  Result := TStringGrid.Create(self);
   with  Result do begin
     Parent := asahibi;       Name:= 'K'+IntToStr(kartNo); Visible := true;
     Position.X := 0;         Position.Y     := 0;
     Width      := 253;       Height         := 100;
     Enabled    := true;      Align          := TAlignLayout.None;
     CanFocus   := true;      DefaultDrawing := true;
     HitTest    :=true;       Margins.Bottom :=0; Opacity    :=1;
     Margins.Top:=0;          Margins.Right  :=0; Margins.Left:=0;
     Options:=[TGridOption.ColumnResize,TGridOption.ColumnMove,TGridOption.ColLines,TGridOption.RowLines,TGridOption.Tabs,TGridOption.AutoDisplacement ];
     RowCount   :=3;          RowHeight  :=30; TabStop:=true;
     StyledSettings:= [];     TextSettings.Font.Family:='Arial'; TextSettings.font.Size:=16; TextSettings.Font.Style:=[TFontStyle.fsBold];
     TextSettings.FontColor:= TAlphaColors.Black; TextSettings.HorzAlign:=TTextAlign.Center; TextSettings.Trimming:=TTextTrimming.Word; TextSettings.VertAlign:=TTextAlign.Center;
     DefaultDrawing := False;
     Enabled:=true;
     OnDrawColumnCell:=KRENK_DEGIS;
     for i := 0 to 8 do begin
        Kolon:=TStringColumn.Create(self);
        with Kolon do begin
         Width:=30;
         Margins.Bottom:=0; Margins.Left:=0;Margins.Right:=0;Margins.Top:=0;
         Padding.Bottom:=3; Padding.Left:=3; Padding.Right:=3; Padding.Top:=3;
         Opacity:=1;
         Visible:=true;
        end;
        AddObject(Kolon);
     end;
    for  satir:= 0 to RowCount -1 do
    for sutun := 0 to ColumnCount -1 do begin
        Cells[sutun,satir]:=KART_1[SATIR]; ///KART_1 DEKİ BİLGİLERİ SIRAYLA AL
    end;

  end;

  Kolon.Free;
end;





GmGdmZ.png
Cevapla
#2
İki boyutlu dizi kavramını araştırın


var
  BenimDizi : Array of Array of Byte;
begin
  Setlength(BenimDizi, 100);  

bu 100 satırlık bir dizi tanımlar. 
sonra her satırı 0..99 'a kadar bir döngü ile (örneğin idx olsun) 

SetLength(BenimDizi[idx], 50);

gibisinden tanım ile bu her bir satır için 50 sütun tanımlamış olursun. 

Bir not, mümkün olduğunca dizi elemanları için ihtiyacınız olandan büyük yer kaplayan tip tanımlamayın. Burada Byte dedim 255'e kadar değerleri tutar. Integer, String vs ekonomik değil
Gerisi sende.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
İki boyutlu diziler kullanım şekilleri ve yönetimi biraz karmaşık geldi ama biraz daha inceleyeceğim. Teşekkürler.
Cevapla
#4
StringGrid ile ne yapıyorsanız bu da hemen hemen aynı. Arama işi bir fonksiyona bakar.


Hücre mantığı   BenimDizi[10,3] := 20;  gibisinden
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#5
Alıntı:gibisinden tanım ile bu her bir satır için 50 sütun tanımlamış olursun.
Yanlış mı anlıyorum.
Dizinin her satırı elli sütündan mı oluşacak ?  Ozaman bu yöntemle 135 satırlı ve her bir satırında 27 sütün olan bir dizi oluşturabilirim..
Cevapla
#6
(16-02-2019, Saat: 13:39)CesuR Adlı Kullanıcıdan Alıntı: İki boyutlu diziler kullanım şekilleri ve yönetimi biraz karmaşık geldi ama biraz daha inceleyeceğim. Teşekkürler.

Merhaba,
Yeni Kaynak kitabımızın 309. Sayfasında yer alan örnek bu konuda (çok satır ve sütunlu değerlerin bir tablo gibi gösterilmesi) size yardımcı olacaktır @CesuR bey.
Cevapla
#7
Bende şuan bu konu için kitabınızı karıştırıyordum teşekkürler hemen bakıyorum Smile  ( Not : Kitabınız bana ulaştığı gün İsmail arkadaşımızada ulaştı. Eminim şuan zevkle kitabın yarısına gelmiştir )

Örneği inceledim mantığını anladım. Çok teşekkürler. Çok boyutlu ile tek boyutlu arasında bana getireceği kolaylığı, yararı anlayamadım. Her iki şekilde 135 bilgi giriliyor. Bunun kapladığı hafıza, performans  yönünden mi farkı olur ? 

//İki boyutlu dizi
const
notlar: array [0..2,0..3] of single=
(
 (55,85,75,77),
 (75,85,85,75),
 (80,91,87,83)
);


///Tek boyutlu dizi
Kart1:array [0..3] of single=(55,85,75,77)
Kart2:array [0..3] of single=(75,85,77,88)
Cevapla
#8
her defasında kart1, kart2...kartn diye yazmaktansa kart adlı dizi değişkeninin adını bir defa yazıp, indisler (index, belirteç, gösterge) sayesinde dilediğin pozisyona konumlanabilirsin.

örneğin, senin yönteminle 123 numaralı kart için kart123 falan fıstık yazmak gerekirken diğer yöntemde kart[123,1] yazarak 123 numaralı kartın ilk sayısına ulaşabilirsin.



procedure TForm1.Button1Click(Sender: TObject);
  var
    kart: array of array of integer;
    i, j, adet, kolon, sayac: Integer;
begin
  adet := 135;
  kolon := 5;

  SetLength(kart, adet, kolon);

  randomize;

  for i := 0 to adet-1 do
    for j := 0 to kolon-1 do
      kart[i,j] := 1 + random(90);

  form1.Caption := '';

  for sayac := 0 to kolon-1 do
    form1.Caption := form1.Caption + IntToStr(kart[122,sayac]) + ' ';

end;
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Array of Stings içerisinde arama yapma esistem 14 409 06-06-2021, Saat: 07:43
Son Yorum: mrmarman
  SQL Text içerisindebul ve değiştir software44 14 1.033 29-04-2021, Saat: 14:30
Son Yorum: software44
  Delphi Speech to Text Halil Han BADEM 2 353 23-04-2021, Saat: 21:01
Son Yorum: Halil Han BADEM
  JSON ARRAY içerisinde arama mdagli2003 1 492 07-02-2021, Saat: 10:50
Son Yorum: SimaWB
  Farklı alanları olan array tuna 6 1.082 12-01-2021, Saat: 20:23
Son Yorum: tuna



Konuyu Okuyanlar: 1 Ziyaretçi