[trochę NTG] freepascal, lazarus i forma

Ktoś tu się kiedyś chwalił że ogarnia FreePascala i IDE Lazarusa, więc przedstawię problem. Mam taki kod:

StringGrid1.Cells[1,i]:=Format('%s', [osobniki[i].genotyp]);

który oczywiście nie działa, komórki w kolumnie numer 1 w moim StringGrid1 wyświetlają się puste. Pole genotyp w strukturze osobniki jest typu string o stałej długości 8 znaków. Co ciekawe gdy odwołam się do pojedynczego znaku ze stringa, np. tak:

StringGrid1.Cells[1,i]:=Format('%s', [osobniki[i].genotyp[1]]);

to wtedy ten pojedynczy znak mi się wyświetla. Dlaczego nie mogę wyświetlić stringa w całości?

Reply to
Jakub Rakus
Loading thread data ...

U¿ytkownik "Jakub Rakus" napisa³ w wiadomo¶ci news:l60ugq$r79$ snipped-for-privacy@node2.news.atman.pl...

Zak³adaj±c, ¿e w³a¶ciwie indeksujesz "i", to kod wygl±da na poprawny. Przynajmniej w Delphi na pewno by zadzia³a³o. Mo¿e podaj deklaracjê tablicy "osobniki" oraz strukturê jej elementów (rekordu).

--
Pzdr. 
Marek
Reply to
Marek

W dniu 2013-11-13 23:29, Jakub Rakus pisze:

  1. Nie bardzo rozumiem w jakim celu używasz Format do stringa. W takim przypadku Format robi po prostu kopię stringa.
  2. Spróbuj Format('%0:s', [osobniki[i].genotyp])

JK

Reply to
JK

Osobniki to tablica elementów stworzonego przeze mnie typu:

type fenotyp = record numer: byte; genotyp: string[8]; fun_przyst: integer; wyc_kola_rul: real; end;

Reply to
Jakub Rakus

Chcę mieć (później) możliwość formatowania tego co będzie pokazywane na ekranie. Zresztą zwykłe przypisanie też nie działa.

Próbowałem, niestety efektów brak.

Reply to
Jakub Rakus

Bo nie zadziała, w Delphi też nie. Aby wyświetlić zawartość StringGrid, musisz przechwycić event: OnDrawCell K.

Reply to
John Smith

Chyba się nie zrozumieliśmy, ja nie chce wyciągać tego co jest w komórce StringGrida tylko chcę do niej wpisać jakieś tam stringa. Co idealnie działa gdy robię np. tak: StringGrid.Cells(x,y):='jakiś tekst' albo tak: my_string:='jakiś tekst'; StringGrid.Cells(x,y):=my_string; ale NIE DZIAŁA jak chcę do tej komórki wrzucić jedno z pól typu złożonego, przy czym to jedno konkretne pole jest typu string.

Reply to
Jakub Rakus

Ja też próbowałem. I działa. Sprawdź czy aby na pewno poprawnie zapisujesz dane do tablicy, tzn. czy pod indeksem i są jakiekolwiek dane.

JK

Reply to
wasikan

Napisz jakiś _bardzo_krótki_ program i wyślij go na grupę. Może problem leży w braku przydzielonej pamięci? Przypomnę, że StringGrid.Cells(x,y) z konkretnym x i y, musi wcześniej istnieć, ustawiając np: StringGrid1.ColCount StringGrid1.RowCount K.

Reply to
John Smith

Bzdura.

Kolejna bzdura.

--
Pzdr. 
Marek
Reply to
Marek

A czy temu string-owi "genotyp" jest przypisywany tekst zawieraj±cy polskie znaki (z ogonkami, kreseczkami)? Je¶li nie, to je¶li np. bêdzie 'abcdefg', to te¿ nie dzia³a?

--
Pzdr. 
Marek
Reply to
Marek

procedure TForm1.Button1Click(Sender: TObject);populacji początkowej var i: integer; begin ilosc_osobnikow:=SpinEdit1.Value; StringGrid1.Clear; StringGrid1.RowCount:=ilosc_osobnikow+1; for i:=1 to ilosc_osobnikow do begin osobniki[i].numer:=i; osobniki[i].genotyp:=permutacja(8); end; for i:=1 to ilosc_osobnikow do begin StringGrid1.Cells[0,i]:=Format('%d', [osobniki[i].numer]); StringGrid1.Cells[1,i]:=Format('%s', [osobniki[i].genotyp]); end; end;

Kolumny stworzone we właściwościach StringGrida, tak żeby miały już konkretne nazwy, szerokości etc. Zresztą jak wrzuce do kolumny numer 1 jakąś wartość numeryczną to ją widzę.

Reply to
Jakub Rakus

A kompilujesz to pod windowsem czy linuxem? Może sprawa leży po stronie konfiguracji środowiska? Wartości osobniki.genotyp na pewno są tworzone bo w dalszej części programu inne procedury wyliczają na ich podstawie różne wartości liczbowe i wartości te otrzymuje poprawne (wyświetlam je w innym StringGridzie). A teraz ciekawostka: zrobiłem sobie na szybko idiotyczną funkcję, która wyciąga z mojego stringa kolejne znaki i skleja je w nowego stringa - wtedy się to wyświetla, o co tu chodzi?

Reply to
Jakub Rakus
[...]
[...]

Bzdurnyś bzdurnik, albo niedouczony student. K.

Reply to
John Smith

Prosiłem o krótki program, ten co przysłałeś pozwoliłem sobie uprościć do problemu StringGrid:

unit Unit1;

interface

uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.StdCtrls, Vcl.Samples.Spin;

type TForm1 = class(TForm) Button1: TButton; StringGrid1: TStringGrid; SpinEdit1: TSpinEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;

var Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); var i: integer; ilosc_osobnikow : integer; begin ilosc_osobnikow := SpinEdit1.Value; //StringGrid1.Clear; StringGrid1.RowCount:=ilosc_osobnikow+1; // for i:=1 to ilosc_osobnikow do // begin // osobniki[i].numer:=i; // osobniki[i].genotyp:=permutacja(8); // end; for i:=1 to ilosc_osobnikow do begin StringGrid1.Cells[0,i]:= 'abc'; //Format('%d', [osobniki[i].numer]); StringGrid1.Cells[1,i]:= 'def'; //Format('%s', [osobniki[i].genotyp]); end; end;

end.

Ta wersja działa zgodnie z oczekiwaniem pod Delphi. K.

Reply to
John Smith

Dnia 2013-11-15 John Smith dokonal ponizszego cudu (by zylo sie lepiej):

Co, g³upio ci, ¿e chcia³e¶ siê wym±drzyæ, a wyszed³e¶ na ... :P

Tak siê sk³ada, ¿e parê latek siê pracuje jako programista, a tak banalne rzeczy to nawet uczniowie w liceum informatycznym wiedz± :P

--
Pzdr. 
Marek
Reply to
Marek

U¿ytkownik "Jakub Rakus" napisa³ w wiadomo¶ci news:l65q9f$ett$ snipped-for-privacy@node1.news.atman.pl...

Zignorowa³e¶ moje pytanie dotycz±ce poprawno¶ci wy¶wietlania w StringGridzie w zale¿no¶ci od tre¶ci ³añcucha (czy zawiera polskie znaki), ale choæ nie mam du¿ego do¶wiadczenia w pisaniu pod Lazarusem, to przypuszczam, ¿e problem mo¿e byæ zwi±zany z kodowaniem znaków w tym ¶rodowisku, tzn. UTF-8. W zwi±zku z tym spróbuj zrobiæ co¶ takiego:

Var genotyp: string[8];

genotyp := Utf8ToAnsi('mówiæco¶'); //oczywi¶cie tekst max 8 znaków

StringGrid1.Cells[2,3] := AnsiToUtf8(genotyp);

Czy ten tekst wy¶wietla siê w StringGridzie?

--
Pzdr. 
Marek
Reply to
Marek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.