Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 24 odgovora
  • 5.979 pregleda

Najnovija ↓

RichEdit - kopiranje sadrzaja iz jednog u drugi 07.06.2009. u 17:17 · pre 211 meseci #1
Pokusavam da napravim program koji ce iz jednog txt fajla punog raznih podataka sastavljati ugovor tako sto menja neke reci u template.rtf fajlu. Pokusao sam sledece sto se cinilo kao logicno, ali Insert i Delete kao da ne rade, prodje kompajliranje ali ne obavi posao.... Jel zna neko zasto, i kako to ispraviti??


//kada se otvori txt fajl, on treba da se prikaze u
void __fastcall TForm1::OtvoriClick(TObject *Sender)
{
if( OpenDialog1->Execute() == True )
{ int c= 0;

rtf->Lines->LoadFromFile("template.rtf"); //richedit koji ispise sadrzaj template.rtf, i njega treba menjati
c = rtf->Text.Pos("zstpnk") ; //rec zstpnk treba zameniti sadrzajem richedit-a "Zastupnik"
rtf->Text.Delete(c,6); //ovo prodje kompajliranje, ali ne uradi nista
rtf->Text.Insert(Zastupnik->Lines->GetText(),Zastupnik->Text.Length()); //i ovo prodje kompajliranje, ali ne uradi nista

}
}

Molim za pomoc, gubim zivce :)))
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 07.06.2009. u 18:01 · pre 211 meseci #2
// NETESTIRANO
Code:

// ...
RichEdit1->Lines->LoadFromFile( ... );
// ...
AnsiString StaSeTrazi = "zstpnk";
AnsiString NoviTekst  = "Zastupnik";

TSearchTypes vrsta_pretrage = TSearchTypes() << stMatchCase;

int Pozicija = RichEdit1->FindText( StaSeTrazi, 0, RichEdit1->GetTextLen(), vrsta_pretrage );

if ( Pozicija != -1 )
{
    RichEdit1->SelStart = Pozicija;
    RichEdit1->SelLength = StaSeTrazi.Length();
    RichEdit1->SelText = NoviTekst;
    // ...
    RichEdit1->Lines->SaveToFile( ... );
}
// ...
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 07.06.2009. u 18:42 · pre 211 meseci #3
Ne radi, ali kombinacija tvog i mog koda radi. Hvala puno, kasnije cu okaciti ispravan kod. Mada i dalje ne prebacuje nase znake ispravno.
ć pretvori u ?.... Jel postoji tu neka fora, ne bih da menjam nasa slova sa c,s i sl.
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 07.06.2009. u 19:23 · pre 211 meseci #4
^
Pretpostavljam da treba:
Control Panel > Rergional and language options > Advanced > Language for non-unicode programs > Serbian Latin
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 09.06.2009. u 00:16 · pre 211 meseci #5
Tacno, hvala. Evo i koda, ako neko bude imao slican problem

AnsiString StaSeTrazi = "zstpnk";
AnsiString NoviTekst = "Zastupnik";

Pozicija = rtf->Text.Pos("zstpnk") ;
if ( Pozicija != -1 )
{
RichEdit1->SelStart = Pozicija;
RichEdit1->SelLength = StaSeTrazi.Length();
RichEdit1->SelText = NoviTekst;
// ...
RichEdit1->Lines->SaveToFile( ... );
}
// ...
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 09.06.2009. u 01:12 · pre 211 meseci #6
JOS JEDNO PITANJE: dosao sam do momenta kad treba da granam program u zavisnosti od odgovora korisnika. Posto nemam mnogo iskustva, narocito u builderu (do sada sam sve radio u konzolnim aplikacijama), ne znam kako da postavim pitanje u pop-up dialogu. pitanje treba da bude: zelite li opciju A ili opciju B, i treba da budu dva dugmeta, A i B, pa kad klikne na jedno da se programnastavi svojim smerom..
Malo sam konfuzno objasnio... :)
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 09.06.2009. u 07:20 · pre 211 meseci #7
Ako misliš na obične Yes/No/... dijaloge, imaš nekoliko solucija:

Pogledaj VCL Help u vezi sledećih funkcija, ima i primera:
MessageBox()
MessageDlg()

(Prva je API bazirana iako je wrapovana u VCL, a druga je čisto VCL bazirana)

Za detalje u vezi dijaloga, šaljem dva PDF fajla i jedan primer gde je urađeno nekoliko složenijih primera, pa čak i kako da uradiš svoj Message Box od nule.



Sviđa mi se1
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 10.06.2009. u 19:58 · pre 211 meseci #8
Uspeo, hvala za pomoc.
Jos jedna stvar. Trebam u jednom txt fajlu da promenim sve '\' u 'Đ' ali ne mogu jer mi javlja gresku kad karakteru dodelim vrednost \

[C++ Error] Unit1.cpp(84): E2380 Unterminated string or character constant

jasno mi je zasto javlja ali ne znam kako da je izbegnem... Ako mi i ovde pomognete prestacu da smaram :)))
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 12.06.2009. u 14:12 · pre 211 meseci #11
E SAD IMAM NAJSTRASNIJI PROBLEM!!!

Napisao sam program i na mom racunaru radi perfektno (AMD Athlon x2), bez greske (za sada). Medjutim na drugom racunaru (Intel celeron, preskace neke funkcije i javlja da float-ovi nisu u dobrom formatu...) Zasto to, kako to ispraviti??? Program je pisan u c++ borland builderu
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 12.06.2009. u 14:41 · pre 211 meseci #12
Možda imaš neku float članicu neke klase koja nije lepo složena na adresu deljivu sa 4. Da bi ovo proverio možeš ili da nateraš kompajler da lepo složi članice, korišćenjem #pragma pack direktive (bar je tako u VC++), ili da staviš sve floate svih klasa na početak klase, pre svih drugih članica. Da li možeš da debaguješ .dmp fajl kada ti pukne program (to jest da li program puca, ili se desi nešto drugo)? Da li možeš da lociraš taj float koji pravi problem?
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 19.07.2009. u 17:34 · pre 210 meseci #13
Ispostavilo se da su local settings bili tako namesteni na tom racunaru da je '.' tretirana kao ',' i obrnuto. Namestio sam kako treba i sad je OK. Eto, mozda neko bude imao slican problem...
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 06.04.2010. u 18:04 · pre 201 mesec #14
Posle duže vremena, ozbiljan problem oko istog programa....

Do sada je sve super funkcionisalo: u jednom RichEdit-u se otvori unapred pripremljeni .txt fajl, i onda se odatle na zadata mesta u drugom RichEdit-u kopiraju potrebni podaci.

Problem je sledeci: RANIJE JE TAJ .TXT FAJL BIO LATINIČNI, A SAD JE ĆIRILIČNI I NE MOGU NIKAKO DA GA OTVORIM U RICHEDIT-u!!! Podesio sam sve na eastern europe fonts, u RichEdit mogu pisati ćirilicu, ali ne mogu otvoriti ćirilični fajl. Ima li tu jos neka caka za koju ne znam? Isprobavao sam i kodne strane, nista nije upalilo... Kada otvorim fajl, pojavi se samo jedan simbol "яю"

Koristim XP, u pitanju je Borland Builder 6, molim za pomoć ako neko ima ideju, hitna je stvar

Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 06.04.2010. u 18:38 · pre 201 mesec #15
Moraš da budeš precizan oko tog ćiriličnog formata txt fajla. Txt fajl je možda UTF-16 (što se u Microsoftu zove Unicode), možda je UTF-8, a možda je čak pisan na kodnoj strani 1251 (nadam se da nije). S druge strane tvoja aplikacija je možda Unicode, a možda i nije. Ukupno imaš 3x2=6 mogućih slučajeva. Sve će lepo da radi ako su i txt fajl i tvoja aplikacija Unicode (i ovu kombinaciju ti toplo preporučujem), i to pod uslovom da txt fajl nema takozvani BOM na početku fajla. Sve će raditi i ako je txt fajl pisan u onoj kodnoj stranici u kojoj se na tvom Windowsu izvršavaju non-Unicode aplikacije (ovo nije najsrećnije rešenje, ali bar radi). Za sve ostale kombinacije moraćeš da isprogramiraš nekakvu konverziju podataka (WideCharToMultiByte i MultiByteToWideChar) da bi RichEdit lepo video sadržaj txt fajla.
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 06.04.2010. u 18:50 · pre 201 mesec
izmenjeno 1 put, poslednji put Barni Kamenko 06.04.2010. u 19:42
  1. Barni Kamenko06.04.2010. u 19:42zapis iz teksta poruke
#16
Text fajl je Unicode, ali koliko vidim, Borlan ne podrzava unicode aplikacije.
Posto se program izvrsava na jednom racunaru, nije problem namestiti code page koji je potreban, ali meni to i dalje ne radi. Dakle, ja u Richtext MOGU sam da upisujem cirilicu, ali NE MOGU da otvorim cirilicni tekstualni file.

I sta je taj BOM? kao sto rekoh, meni se pojavljuje samo jedan karakter, da nije sve zbog tog BOM-a?

Nasao sam neke .pas fajlove koji navodno resavaju ove probleme:
https://www.elitesecurity.org/...kojima-treba-Unicode-za-Delphi
Jos samo da skontam kako se koriste :)
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 06.04.2010. u 21:42 · pre 201 mesec #17
BOM je Byte Order Mark, to je fora da označi format teksta (UTF-8, UTF-16LE, UTF-16BE). Ono što je u Windowsu Unicode je zapravo UTF-16LE (Little Endian). Pogledaj na guglu za sve što ti nije jasno. Na Guglu sam i video da su slova яю zapravo BOM za Unicode (0xFF 0xFE), i to kada ta dva bajta čitaš u ćiriličnoj kodnoj stranici. Ne znam kako se uključuje Unicode na Borlandu, možda neko drugi zna, ali sigurno je prosto neka opcija.
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 07.04.2010. u 15:10 · pre 201 mesec #18
ipak cu ovako... mislim da je ipak tako najjednostavnoje

kretacu se kroz fajl karakter po karakter. ako hex vrednost karaktera odgovara odredjenom cirilicnom slovu, upisacu odgovarajuce latinicno slovo. to bi trebalo da radi...

e, sad, opet problem
isprobao sam na nekoliko karaktera i ispada da se hex vrednosti ne podudaraju iako u tabeli pise da je tako... sve radi ali
if (k[0] == 0x0426) k[0]='S';
jednostavno biva ignorisan.
Ima li nekog saveta?
Ima da batalim programiranje zauvek :)
Re: RichEdit - kopiranje sadrzaja iz jednog u drugi 07.04.2010. u 15:57 · pre 201 mesec #19
Prvo, to što radiš ne da nije jednostavnije, nego je sumanuto. Uostalom, kako ćeš da prevedeš ćirilična slova nj, lj i dž?

Ako ti neka oblast znanja treba da bi rešio problem onda savladaj tu oblast. Nemoj da kalemiš svoje postojeće znanje na svaki novi problem. Prvo, dobijaćeš polovična rešenja, a drugo tako ništa nećeš naučiti. Ako zapneš kod neke prepreke onda kopaj dublje i šire, traži pomoć, i napadni prepreku. Nemoj da odustaješ samo zato što ti se trenutno čini da je problem komplikovan. Ako si novajlija u programiranju onda prosto nemaš dovoljno znanja da zaključiš šta je stvarno komplikovano. Zato smo mi ostali tu.

Drugo, nešto nije u redu sa if primerom koji si dao. Prvo k[0] porediš sa short vrednošću, a onda mu dodeljuješ char vrednost. Čudi me da ti se kompajler ne žali. Kog je tipa k?

Treće, da bi lakše debagovao nikad ne stavljaj više instrukcija u istu liniju. U tvom slučaju instrukciju k[0]='S' stavi u sledeću liniju. Tako ćeš znati da li se ta instrukcija izvršava, ili if uslov uopšte nije ni zadovoljen.
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme