Sam sobi poradzilem :) To prawda, ze 80% poruszanych tu problemow byloby rozwiazanych przez ludzi, do ktorych te problemy naleza, gdyby ludzie ci nie mieli internetu, z drugiej jednak strony stracilem na rozwiazanie mojego problemu sporo cennego czasu :(. Ale dosc gadania, opowiem o co chodzilo w moim problemie i jak go rozwiazalem (prymitywnie, ale inaczej nie umiem):
Mialem tablice Buff: array[0..1023] of char z gotowymi znakami. Mialem tez stringa tez z gotowymi znakami. Chcialem aby druga tablica, identyczna do Buff, nazwana Buff2 zawierala po kolei: tekst ze stringa, dwukropek oraz tekst z Buff. Nie wychodzilo mi to, a dlaczego mi nie wychodzilo, dowiedzialem sie uzywajac pomocy - szukalem slowa "PChar" i znalazlem odpowieni temat, w ktorym bylo napisane tak:
A common error when working with PChars is to store in a data structure, or return as a value, a local variable. When your routine ends, the PChar will disappear because it is simply a pointer to memory, and is not a reference counted copy of the string. For example:
function title(n: Integer): PChar;
var
s: string;
begin
s := Format('title - %d', [n]);
Result := PChar(s); // DON'T DO THIS
end;
This example returns a pointer to string data that is freed when the title function returns.
Nie chce mi sie tego tlumaczyc, ale wynika z tego, ze nie moglo mi sie udac :) Wpadlem wiec na taki (prymitywny, jak wczesniej wspomnialem) pomysl:
procedure TForm1.Button1Click(Sender: TObject);
var
buff, buff2: array[0..1023] of char;
str: string;
pch: pchar;
ch: char;
tmp: string;
i: integer;
begin
buff:='abcdefghijklmnopqrstuvwxyz';
str:='1234567890';
tmp:=str+': '+copy(buff, 0, sizeof(buff));
pch:= pchar(tmp);
for i:= 0 to length(tmp) do
buff2[i]:= pch[i];
label1.caption:= copy(buff2, 0, sizeof(buff));
end;
I dziala!
Dzieki, chlopaki, za pomoc :-/