RTV forum PL | NewsGroups PL

Jak poprawnie wyświetlić pełny string z pola genotyp w StringGrid1 w Lazarusie?

[trochę NTG] freepascal, lazarus i forma towanie stringa

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie wyświetlić pełny string z pola genotyp w StringGrid1 w Lazarusie?

Goto page 1, 2  Next

Jakub Rakus
Guest

Wed Nov 13, 2013 11:29 pm   



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?

--
Pozdrawiam
Jakub Rakus

Marek
Guest

Thu Nov 14, 2013 7:51 am   



Użytkownik "Jakub Rakus" <szczur01@op.pl> napisał w wiadomości news:l60ugq$r79$1@node2.news.atman.pl...
Quote:
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.

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

JK
Guest

Thu Nov 14, 2013 5:21 pm   



W dniu 2013-11-13 23:29, Jakub Rakus pisze:
Quote:
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?


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

Jakub Rakus
Guest

Thu Nov 14, 2013 5:48 pm   



On 14.11.2013 07:51, Marek wrote:

Quote:
Może podaj deklarację tablicy "osobniki" oraz strukturę jej elementów
(rekordu).


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;

--
Pozdrawiam
Jakub Rakus

Jakub Rakus
Guest

Thu Nov 14, 2013 5:55 pm   



On 14.11.2013 17:21, JK wrote:
Quote:

1. Nie bardzo rozumiem w jakim celu używasz Format do stringa. W takim
przypadku Format robi po prostu kopię stringa.

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

Quote:
2. Spróbuj Format('%0:s', [osobniki[i].genotyp])

JK

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

--
Pozdrawiam
Jakub Rakus

John Smith
Guest

Thu Nov 14, 2013 7:05 pm   



On 14-11-2013 17:55, Jakub Rakus wrote:
Quote:
On 14.11.2013 17:21, JK wrote:

1. Nie bardzo rozumiem w jakim celu używasz Format do stringa. W takim
przypadku Format robi po prostu kopię stringa.

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

2. Spróbuj Format('%0:s', [osobniki[i].genotyp])

JK

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

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

Jakub Rakus
Guest

Thu Nov 14, 2013 8:10 pm   



On 14.11.2013 19:05, John Smith wrote:

Quote:

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


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.

--
Pozdrawiam
Jakub Rakus

Guest

Fri Nov 15, 2013 12:01 am   



W dniu czwartek, 14 listopada 2013 17:55:09 UTC+1 użytkownik Jakub Rakus napisał:
Quote:
On 14.11.2013 17:21, JK wrote:



1. Nie bardzo rozumiem w jakim celu używasz Format do stringa. W takim

przypadku Format robi po prostu kopię stringa.



Chcę mieć (później) możliwość formatowania tego co będzie pokazywane na

ekranie. Zresztą zwykłe przypisanie też nie działa.



2. Spróbuj Format('%0:s', [osobniki[i].genotyp])



JK



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




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

John Smith
Guest

Fri Nov 15, 2013 2:10 am   



On 14-11-2013 20:10, Jakub Rakus wrote:
Quote:
On 14.11.2013 19:05, John Smith wrote:


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


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.

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.

Marek
Guest

Fri Nov 15, 2013 7:33 am   



Użytkownik "John Smith" <dam9723@buziaczek.pl> napisał w wiadomości news:l633dm$jvn$1@node1.news.atman.pl...
Quote:
On 14-11-2013 17:55, Jakub Rakus wrote:
On 14.11.2013 17:21, JK wrote:

1. Nie bardzo rozumiem w jakim celu używasz Format do stringa. W takim
przypadku Format robi po prostu kopię stringa.

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

2. Spróbuj Format('%0:s', [osobniki[i].genotyp])

JK

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

Bo nie zadziała, w Delphi też nie.

Bzdura.

Quote:
Aby wyświetlić zawartość StringGrid, musisz przechwycić event: OnDrawCell

Kolejna bzdura.

--
Pzdr.
Marek

Marek
Guest

Fri Nov 15, 2013 10:25 am   



Użytkownik "Jakub Rakus" <szczur01@op.pl> napisał w wiadomości news:l62utl$pit$1@node2.news.atman.pl...
Quote:
On 14.11.2013 07:51, Marek wrote:

Może podaj deklarację tablicy "osobniki" oraz strukturę jej elementów
(rekordu).


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;

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

Jakub Rakus
Guest

Fri Nov 15, 2013 7:45 pm   



On 15.11.2013 02:10, John Smith wrote:
Quote:

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.

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(Cool;
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ę.

--
Pozdrawiam
Jakub Rakus

Jakub Rakus
Guest

Fri Nov 15, 2013 7:48 pm   



Quote:

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


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?

--
Pozdrawiam
Jakub Rakus

John Smith
Guest

Fri Nov 15, 2013 8:27 pm   



[...]
Quote:
Bzdura.
[...]

Kolejna bzdura.

Bzdurnyś bzdurnik, albo niedouczony student.
K.

John Smith
Guest

Fri Nov 15, 2013 8:46 pm   



Quote:
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ę.

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(Cool;
// 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.

Goto page 1, 2  Next

elektroda NewsGroups Forum Index - Elektronika Polska - Jak poprawnie wyświetlić pełny string z pola genotyp w StringGrid1 w Lazarusie?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map