Mam problem , wyciągam z RichEdit linię zaznaczoną
przy pomocy:
linia:= RichEdit1.SelText
ale otrzymuję w TString a potrzebuję String, nie wiem jak to zrobić
Że co? Przecież taki kod działa:
var
Line : string;
begin
Line := RichEdit1.SelText;
ShowMessage(Line);
end;
Poza tym umieszczanie takich samych postów w różnych działach nie uczyni z Ciebie zajebistego programisty, a i w zrozumieniu podstaw języka również nie pomoże. Najlepiej poczytać kompendium na stronie 4p, a jak coś będzie nie tak podczas wysyłana posta to możesz go usunąć, co już zrobiłem w dziale Delphi, ale taka moja rada na przyszłość: o podstawy pytaj w dziale Newbie.
Nie cuduj, nie ma czegoś takiego, jak TString
jest co najwyżej TStrings
.
Tak wszystko w terii gra , tylko że jak próbuję nawet linię załadować do Memo czy z niby tego łańcucha odciąć kawałek przy pomocy Delete , otrzymuję komunukat o różnicy klas. Umieszczenie tego w miejscach nie wynika z pychy tylo z rozpaczy bo walę głową w mur teorii , która za cholerę nie chce zgodzić się z praktyką.Pracuję na Delphi 7 Enterprise. Bardzo proszę o pomoc.
marudzisz. nawet nie podajesz kodu ani jaki błąd dostajesz.
bycho56 napisał(a)
wyciągam z RichEdit linię zaznaczoną
przy pomocy:
linia:= RichEdit1.SelText
ale otrzymuję w TString a potrzebuję String
- Uważaj, bo SelText zwraca właśnie tekst (oczywiście jako zwykły typ string). Jeżeli SelText obejmował kilka linii w RichEdit, to w tym stringu znajdą się również znaki końca wierszy.
- Nikt nie słyszał o jakimś TString.
bycho56 napisał(a)
jak próbuję (...) z niby tego łańcucha odciąć kawałek przy pomocy Delete
Napisz System.Delete.
Dziękuję za wszystkie uszczypliwości, widzę że to jest forum dla ludzi lubiących się pośmiać z innych a nie lubiących pomagać
podaję kawałek kodu
with RichEdit1 do
begin
SelStart := FindText('SCF Done:' , 0 , GetTextLen,[stWholeWord]) ;
SelLength := 70;
SelAttributes.color:=clBlue;
end;
Label5.Caption := RichEdit1.SelText ;
linia := RichEdit1.SelText;
Eneria:=delete(linia, 20, 20 );
błąd
incompatible types : 'String' and 'procedure, untypes pointer or untyped parameter'
Eneria:=delete(linia, 20, 20 ); //Co to jest?
EDIT// żeby nie było że nie lubimy pomagać to przeanalizuj ten kod to zobaczysz jak działa Delete
var
tekst: string;
begin
tekst:= 'Test';
Delete(tekst, 2, 2); //tekst, od ktorego znaku, ile znaków
ShowMessage(tekst);
end;
Kazek, autor pewno nie wie, że tak nie można, więc postaram się trochę wyjaśnić.
Błąd jest w ostatniej linii kodu. Po prawej stronie instrukcji przypisania może się znajdować jakaś wartość, stała, zmienna albo funkcja. Funkcja oblicza i udostępnia jakąś wartość, którą to wartość można podstawić pod zmienną znajdującą się po lewej stronie instrukcji przypisania.
Przykład z użyciem **funkcji ** Concat:
var
Wyraz1, Wyraz2, Wyraz3, Zdanie: string;
Wyraz1:= 'Ala ';
Wyraz2:= 'ma ';
Wyraz3:= 'kota.';
Zdanie:= Concat(Wyraz1, Wyraz2, Wyraz3);
Delete
to jest procedura i nie może znajdować się po prawej stronie instrukcji przypisania, bo procedura nie udostępnia żadnej wartości. Ten problem można rozwiązać w następujący sposób:
Label5.Caption:= RichEdit1.SelText;
linia:= RichEdit1.SelText;
Delete(linia, 20, 20);
Eneria:= linia;
Poczytaj czym si różni wywołanie procedury i funkcji i wszystko się wyjaśni.