Dodaj do ulubionych

dopisywanie tekstu w delphi

14.07.06, 20:46
problem jest nastepujacy: mam tablicę znaków, powiedzmy, że jest ona
15-elementowa. Chciałbym jej elementy umieścić w RichEdit, lecz nie każdy w
nowej linii lecz obok siebie, w jednym wierszu, oddzielone spacją. korzystałem
już między innymi z RichEdit.Lines.Insert(0,tablica[i]) ale efekt byl
analogiczny jakbym uzył RichEdit.Lines.Add(tablica[i]). Czy może mi ktoś
podpowiedzieć jak mam wstawić tekst w jednym wierszu?
Edytor zaawansowany
  • 2uboot2 15.07.06, 14:52
    Programuje w C++ Builder, więc składnia języka inna, lecz mechanizmy komponentów
    identyczne.
    Kwestia pierwsza. Tekst z tablicy w jednej linijce.
    Tablica piętnastoelementowa.
    char znaki[15]={'a','1','2','b','c','d','e','z','f','v','n','h','9','q','c'};
    RichEdit1->Lines->Add(znaki); (W Delphi zdaje sie zamiast strzałek są kropki);
    //Wyswietla a12bcdezf.... itd w jednej linijce
    Żeby wyswietlić to z odstępami szerokości jednej spacji przynajmniej dla mnie
    najwygodniej jest zadeklarować nową tablicę (o dwa razy większej wielkości niż
    ta pierwotna) i w miejsca nieparzyste skopiować znaki z tablicy znaki, a w
    parzyste skopiować spacje tzn ' ';
    char tablica_ze_spacjami[31];
    for(i=0,j=0;i<31,j<15;i+=2,j++)
    tablica_ze_spacjami[i]=znaki[j];
    //teraz spacje
    for(i=1;i<31;i+=2)
    tablica_ze_spacjami[i]=' ';
    No i wyświetlenie
    RichEdit1->Lines->Add(tablica_ze_spacjami);
    Nie wiem czy jest to dobrze, ale od biedy można uznać.
  • negevmc 15.07.06, 19:02
    kostucha999 napisał:

    > problem jest nastepujacy: mam tablicę znaków, powiedzmy, że jest ona
    > 15-elementowa. Chciałbym jej elementy umieścić w RichEdit, lecz nie każdy w
    > nowej linii lecz obok siebie, w jednym wierszu, oddzielone spacją.


    // na TForm1 mam RichEdit1: TRichEdit, Edit1: TEdit, Button1: TButton
    // to jest implementacje Button1.OnClick
    procedure TForm1.Button1Click(Sender: TObject);
    var
    aChars: array[1..15] of char;
    i: integer;
    iLen: integer;
    sLine: string;
    begin


    // wypelniam tablice pustymi znakami
    for i := Low( aChars ) to High( aChars ) do
    aChars[ i ] := #0;

    // maxymalny iterator pentli, w ktorej wypelniac bede tablice
    // uwaga MinIntValue znajduje sie w unit math, ktory trzeba dodac do uses
    iLen := MinIntValue( [ High(aChars), Length( Edit1.Text ) ] );

    // kopiuje text ze znajdujacego sie na TForm1 pola edit
    // do tablicy (tylko 15 pierwszych znakow
    for i := 1 to iLen do
    aChars[ i ] := Edit1.Text[ i ];

    // dotad tylko tworzylem tablce z Edit1
    // rozumiem, ze Ty juz ja masz gotowa wiec wszystko dotad mozesz opuscic



    // incjuje string, ktory potem dodam do RichEdit
    sLine := '';

    // kopiuje znaki z tablicy do zmiennej sLine: string
    // po kazdym znaku jesli nie jest #0 dodaje spacje
    for i := Low( aChars ) to High( aChars ) do
    begin
    if aChars[ i ] <> #0 then
    sLine := sLine + aChars[ i ] + ' ';
    end; // for i := Low( aChars ) to High( aChars ) do

    // dodaje caly string do RichEdit
    RichEdit1.Lines.Add( sLine );

    // ce'est tout ;-)


    end;



    --
    rzuć okiem
  • kostucha999 16.07.06, 16:08
    dziękuję 2uboot2 i negevmc za poświęcenie mi waszego czasu. skorzystałem z
    waszych rad i wsazówek. ostatecznie jednak stworzyłem coś własnego, może nie
    jest to elegancki sposób, ale działa. z punktu widzenia całego projektu chyba
    najbardziej funkcjonalny.

    procedure TForm1.Button1Click(Sender: TObject);
    var
    TF:TextFile;
    i:Integer;
    begin
    // do pliku zostaja zapisane wyrazy ktore sa w RichEdit1
    // Write -> pozwala na zapis w jednym wierszu

    AssignFile(TF,'plik.txt');
    try Rewrite(TF);
    for i:=0 to RichEdit1.Lines.Count - 1 do
    Write(TF,RichEdit1.Lines[i]+' ');
    finally
    CloseFile(TF);
    end;
    // teraz tylko wystarczy wczytac tekst z pliku do RichEdit1
    RichEdit1.Lines.LoadFromFile(plik.txt);
    end;

    jeszcze raz Wam dziękuję i pozdrawiam.
  • negevmc 17.07.06, 10:13
    kostucha999 napisał:

    > może nie jest to elegancki sposób, ale działa. z punktu widzenia całego
    > projektu chyba najbardziej funkcjonalny.

    No nie znamy tego punku widzenia więc trudno wyrokować ale widzę, że w
    pierwotnym wpisie nie ujawniłeś nam prawdziwych celów ;-)
    Masz już rich edit i jakieś w nim słowa a nie tablice pojedyńczych znakow (char)
    chodziło jedynie o zapisanie ich w jednej linii.
    Mam dwie uwagi do Twojego rozwiązania:
    1. przeciw:
    rzeczywiście rozwiązanie zapewne działające ale mało eleganckie.
    Znowu nie wiem o co chodzi w całym projekcie ale wciąganie w banalny problem
    zbioru dyskowego...! A co z tym zbiorem później robisz ? Nie wymazujesz ?
    A co jeśli użytkownik nie ma odpowiednich uprawnień do tworzenia zbiorów.
    Powinenes przynajmniej zrobić to kartotece przewidzianej dla zbiorów
    tymczasowych np. c:\Documents and Settings\nazwa użytkownika \ local Settings
    \temp czy coś podobnego -> wskazuje na to zmienna systemowa TEMP albo TMP
    Czy nie lepiej jest po prostu w taki sam sposób w jaki zapisaujesz do zbioru
    stworzyć jedną zmienną typu string ?

    var
    s: string;
    begin
    s := '';
    for i:=0 to RichEdit1.Lines.Count - 1 do
    s := s + RichEdit1.Lines[i]+' ';

    RichEdit1.Lines.Clear;

    RichEdit1.Lines.Add( s );

    end;

    i po wszystkim.

    2. za:
    zawsze to własne rozwiązanie ;-)

    Pozdrawiam

    --
    rzuć okiem
  • kostucha999 17.07.06, 18:17
    Miałem napisać program, który zlicza wyrazy i zwroty w podanym tekście. Przy
    zliczaniu ma pomijać spójniki i przyimki oraz wyrazy, które będą znajdować się
    bazie wyrazów pomijanych. Ponadto jest plik zawierający zwroty, które w tym
    tekście mają być wyszukane i zliczone. wyniki mają być przedstawione na dwa
    sposoby: 1 -> wypisanie słów + ilość występowania każdego z nich, a na końcu
    zwroty; 2 -> wypisanie w wierszu tylko samych słów i zwrotów bez liczb
    oznaczających ilość ich występowania.
    Dodatkowo dostałem inforamcje, iż program nie musi być "idiotoodporny". Program
    będzie pracował na domowym kompie.

    Pozdrawiam

Popularne wątki

Nie pamiętasz hasła

lub ?

 

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka