sYn Δημοσ. 25 Απριλίου 2007 Δημοσ. 25 Απριλίου 2007 Χρησιμοποιώ την Borland C++ Builder 6 για να δημιουργήσω ένα text editor (κειμενογράφο) στην φόρμα με όλα τα καλούδια (menu,toolbar,statusbar...). Κόλλησα στο σημείο για τα bold, italic, underline. Ο κώδικας που έγραψα είναι για όλο το κείμενο, δλδ όταν πατάς το bold να γίνονται έντονοι όλοι οι χαρακτήρες του κειμένου. Προσπαθώ όταν επιλέγω κάποιο χαρακτήρα να γίνεται μόνο εκείνος έντονος. >void __fastcall TForm1::Bold1Click(TObject *Sender) { if (RichEdit1->Font->Style.Contains(fsBold)) { RichEdit1->Font->Style=Memo1->Font->Style>>fsBold; Bold1->Checked=false; Toolbutton6->Down=false; } else { RichEdit1->Font->Style=Memo1->Font->Style<<fsBold; Bold1->Checked=true; Toolbutton6->Down=true; } } Ο παραπάνω είναι ο κώδικας που έχω για όλο το κείμενο. Ποιος είναι ο σωστός για μόνο ένα χαρακτήρα;
Directx Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 Για να επεξεργαστείς τα χαρακτηριστικά του επιλεγμένου κειμένου του TRichEdit component θα πρέπει να χρησιμοποιήσεις το ->SelAttributes property. Ο παρακάτω κώδικας κάνει bold κείμενο που έχουμε επιλέξει: > RichEdit1->SelAttributes->Style=TFontStyles()<<fsBold; Για να εντοπίζεις τις ιδιότητες του επιλεγμένου κειμένου, δες το SelectionChange event του TRichEdit. Ο παρακάτω κώδικας (δηλωμένος στο SelectionChange event) αλλάζει τον τίτλο του παραθύρου σε "BOLD STYLE DETECTED" εάν το επιλεγμένο κείμενο μας περιέχει Bold χαρακτήρες, διαφορετικά "N/A": > void __fastcall TForm1::RichEdit1SelectionChange(TObject *Sender) { if(RichEdit1->SelAttributes->Style.Contains(fsBold)) Caption = "BOLD"; else Caption = "N/A"; } Βελτιώνοντας τέλος τον παραπάνω κώδικα, με την βοήθεια του SelAttributes->ConsistentAttributes μπορείς να ξεχωρίζεις εάν κάθε TFont->Style εφαρμόζεται (πχ. test) ή δεν εφαρμόζεται (πχ. test) συνεχόμενο σε ολόκληρο το περιεχόμενο του SelAttributes οπότε επιστρέφει true, διαφορετικά αν το TFont->Style εφαρμόζεται διακεκομμένα με κάποιο άλλο (πχ. test) τότε το SelAttributes->ConsistentAttributes επιστρέφει false. > if(RichEdit1->SelAttributes->ConsistentAttributes.Contains(fsBold)) { if(RichEdit1->SelAttributes->Style.Contains(fsBold)) Caption = "BOLD STYLE DETECTED"; else Caption = "NO BOLD"; } else Caption = "BOLD STYLE AND ?"; Καλή συνέχεια.
sYn Δημοσ. 26 Απριλίου 2007 Μέλος Δημοσ. 26 Απριλίου 2007 Ευχαριστώ πολύ φίλε μου αλλά τελικά βάζοντας από το action list σαν standard action το Bold δε χρειάστηκε να γράψω κώδικα γιατί λύνει την απορία μου. Πάντως θα το έχω υπόψην μου. Και μια που σε βρήκα ήθελα να σε ρωτήσω το εξής: Όταν το αποθηκεύω το κείμενο(π.χ. insomnia) σαν txt και μετά το ανοίξω με το notepad τότε μου βγάζει: >{\rtf1\ansi\ansicpg1253\deff0\deflang1032{\fonttbl{\f0\fswiss\fcharset0 Tahoma;}{\f1\fnil MS Sans Serif;}} \viewkind4\uc1\pard\lang1033\f0\fs16 insomnia\lang1032\f1 \par } ενώ στο Microsoft Word βγάζει κανονικά insomnia. Μήπως ξέρεις το λόγο και αν ναι πως να το διορθώσω; Σε ευχαριστώ πολύ. P.S. Το έχω ολοκληρώσει και το μόνο πρόβλημα που εντόπισα είναι το παραπάνω.
Directx Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 Τα standard action είναι καλά αλλά ακόμα καλύτερα είναι να γνωρίζεις το πως κάνουν τα "μαγικά" τους μάλιστα η γνώση της SelAttributes μπορεί να σε ξελασπώσει σε αρκετά θεματάκια Για να σώσεις ή να διαβάσεις ένα αρχείο σε μορφή text αντί RTF θέσε πριν το SaveToFile / LoadFromFile το TRichEdit property PlainText σε true, διαφορετικά false. πχ. Για αποθήκευση ως text. > RichEdit1->PlainText = true; RichEdit1->Lines->SaveToFile("C:\\TEST.TXT");
sYn Δημοσ. 26 Απριλίου 2007 Μέλος Δημοσ. 26 Απριλίου 2007 Σε ευχαριστώ πάρα πολύ. Ξέρω πως όσες περισσότερες εντολές γνωρίζεις τόσο το καλύτερο αλλά είχα περιορισμένο χρόνο να το ολοκληρώσω. Μέσα σε δύο μέρες έπρεπε να δημιουργήσω ένα text editor με toolbar, statusbar και επιλογές File,Edit,Search,Format,Help γι' αυτό και διάλεξα όσο το λιγότερο κώδικα.Βασικά ο μόνος σοβαρός κώδικας είναι για τα dialog(Open,Save,Font,Print,Color,Find,Replace) που έχω βάλει.Και έχω να πιάσω την C πάνω από 2 χρόνια.
Directx Δημοσ. 26 Απριλίου 2007 Δημοσ. 26 Απριλίου 2007 Μην ανησυχείς, καλά έκανες καθώς αυτή είναι η πεμπτουσία των εργαλείων γρήγορης ανάπτυξης (RAD) και ευτυχώς ο C/C++ Builder αλλά και η νεώτερη έκδοση του, η CodeGear Turbo C++ (και BDS 2006) τα καταφέρνουν αρκετά καλά. Καλή συνέχεια
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.