| Autor |
Beitrag |
jackie05
      
Beiträge: 357
|
Verfasst: Mi 12.10.05 18:51
hi,
ich wollte eigentlich ein Programm für Knuddels Proggen, in dem man ein Text eingibt, und Farbisch einstellen kann.
Wenn ich z.B. in Edit1 das eingebe "°B°Hallo, °R°wie geht es dir!", dann möchte ich das es so in RichEdit1 erscheint " Hallo, wie geht es dir!",
also für °B° = Blau, und °R° = Rot, wisst ihr vieleicht wie man das am einfachsten machen kann, oder könnt ihr mir vieleicht ein beispiel schreiben, für jede hilfe bin ich euch sehr dankbar, ich danke euch schonmal
MFG Christian Moderiert von Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 14.10.2005 um 23:54
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 12.10.05 18:56
Zuerst musst Du Dir eine Routine schreiben, die aus deinem Eingabetext Kommandos macht, also z.B.:
Quelltext 1:
| '~R~Das wird Rot,~B~und ab hier Blau' |
kann z.B. so übersetzt werden
Quelltext 1: 2: 3: 4:
| Farbe wechseln : Rot Text hinzufügen : 'Das wird Rot' Farbe wechseln : Blau Text hinzufügen : 'und ab hier Blau' |
Dann sorgst Du dafür, das die Kommandos, hier also 'Neue Farbe' und 'Text hinzufügen' entsprechend umgesetzt werden. In der Hilfe zu TRichEdit steht, wie man die Farbe wechselt...
_________________ Na denn, dann. Bis dann, denn.
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Mi 12.10.05 19:03
erstmal vielen dank für deine antwort,
leider weiss ich nicht wie ich das jetzt in mein projekt schreiben muss, so gut bin ich ja noch nicht, könntest du mir vileicht mal ein kleines beispiel schreiben, wenn ich °B° schreibe, das es ab da Blau wird, und wenn ich °R° schreibe, das es ab da Rot wird, ich bin dir sehr dankbar wenn du mir das bitte zeigen könntest, ich danke dir schonmal
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Mi 12.10.05 23:03
Hallo,
ist es in Deinem Prog erforderlich den Umweg über das Edit zu nehmen?
Wenn Du darauf verzichten kannst,
könnte man das Einfärben wesentlich einfacher direkt im RichEdit über Tastenkombinationen z.B.
Strg+R = rot
Strg+B = blau
...
realisieren.
Der folgende Code reicht dafür aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.RichEdit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin if ssCtrl in Shift then case Chr(Key) of 'B' : begin RichEdit1.SelAttributes.Color := clBlue; Key := $0; end; 'R' : begin RichEdit1.SelAttributes.Color := clRed; Key := $0; end; end; end; |
Damit kannst Du auch nachträglich leichter Änderungen im Text vornehmen,
z.B. den markierten Text von rot auf blau ändern.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Do 13.10.05 08:11
vielen dank für die mühe, aber ich möchte das in Edit1 machen, das wenn ich auf Button1 klick, das es dann in RichEdit1 reinkommt, so wie vorschau. geht das, oder nich?, ich danke dir schonmal
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 13.10.05 13:51
Hallo,
jackie05 hat folgendes geschrieben: | | ...wenn ich auf Button1 klick, das es dann in RichEdit1 reinkommt, so wie vorschau. geht das, oder nich?... |
ja
und wie, hat alzaimar Dir schon beschrieben.
Was hast Du denn bisher versucht?
Eine grobe Beschreibung
Am besten arbeitest Du mit einer Schleife, in etwa: while Pos('°',s) >0 do
Deine Formatierungs-Tags z.B. '°B°' kannst Du mit Pos finden.
Das 'B' für Blau ist dann Pos('°',String)+1,
Das kannst Du dann ja ähnlich auswerten wie in der Procedure RichEdit1KeyDown die ich gepostet hatte.
Danach löscht Du mit Delete die ersten drei Zeichen('°B°').
Anschließend mit Copy und Pos('°',String) den Text bis zum nächsten Formatierungs-Tag auslesen.
Den Text kannst Du dann mit Delphi-Quelltext 1:
| RichEdit1.SelText := ErgString; | ins RichEdit setzen.
Versuch das mal, kannst bei Problemen dann ja weiter Fragen stellen.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Do 13.10.05 15:46
danke dir für die antwort, aber könntest du nicht mir ein beispiel schreiben, nur wen man das eingibt °B° und °R°, das die farben dann zugwiesen wird, für die hilfe bin ich dir sehr dankbar, ich danke dir schonmal für die hilfe
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 13.10.05 16:27
Hallo,
wie wäre es mit etwas Eigeninitiative
Lannes hat folgendes geschrieben: | | ...Was hast Du denn bisher versucht?... |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Do 13.10.05 17:59
sorry, das habe ich vergessen zu schreiben was ich bisher gemacht habe:
also, bisher habe ich folgendes gemacht:
Texte ausgeben
StringListe erstellen
Den Umgang mit TMediaPlayer
Ini File Schreiben und Lesen
Zugriff auf andere Fensters, z.B. Arbeitsplatz öffnen etc.
u.s.w. mer weiss ich imoment nicht was ich noch alles gemacht habe.
nun möchte ich das jetzt lernen wie man das mit Farbe hinbekommt.
z.B. schreibe ich in Edit1 folgendes rein "°B°Hallo, °R°wie geht es dir"
dann soll das so in RichEdit1 erscheinen " Hallo, wie geht es dir", aber nicht dass das hier °B° mit eingefügt wird, es soll for dem einfügen aus dem string entfernt werden, nur keine ahnung wie das jetzt gehen soll, für die hilfe bin ich dir sehr dankbar, ich danke dir schonmal
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 13.10.05 23:34
Hallo,
jackie05 hat folgendes geschrieben: | | ..sorry, das habe ich vergessen zu schreiben was ich bisher gemacht habe... |
meinte eher was Du im Zusammenhang mit diesem Thema aus den bisherigen Vorschlägen bzw. Anregungen versucht/gecodet hast.
Aber hab Dir mal so zum Anfang was geprogt:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| var s : string; begin s := Edit1.Text; while Pos('°',s) >0 do begin case s[2] of 'B' : RichEdit1.SelAttributes.Color := clBlue; 'R' : RichEdit1.SelAttributes.Color := clRed; end; Delete(s,1,3); if Pos('°',s) = 0 then begin RichEdit1.SelText := s end else begin RichEdit1.SelText := Copy(s,1,Pos('°',s)-1); Delete(s,1,Pos('°',s)-1); end; end; |
Jetzt musst Du nur noch verschiedenes abfangen:
- Edit könnte Leer sein
- Innerhalb Text im Edit ist kein °X° enthalten
- Text im Edit beginnt nicht mit °X° => 'Test °B°Hallo°R° Christian'
- Text im Edit endet mit °X° => '°B°Hallo°R°'
- was ist wenn ° im Text enthalten ist => '°B°Hallo, wir haben 32° Temperatur'
- mehr 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Fr 14.10.05 07:53
cool, vielen dank, ich werde es später mal testen, bin gerade in der Schule, wenn es funktioniert, dann poste ich es später hier rein, und danke nochmals
Christian
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Fr 14.10.05 21:43
ich danke dir vielmals, du hast mir echt geholfen.
sorry, aber noch eine Frage hätte ich, und zwar, wenn ich nur # das eingebe, ohne ° das hier, dann möchte ich das eine Zeilenumbruch kommt, habe es bisher so probiert:
Delphi-Quelltext 1:
| '#' : RichEdit1.SelText := #10; |
aber bei diesem befehl möchte ich das es ohne die ° dinger funktioniert, was muss ich da umändern?, habe schon viele möglichkeiten probiert, aber leider ohne erfolg, für die hilfe bin ich dir sehr dankbar, ich danke dir schonmal
Christian
|
|
Flocke
      
Beiträge: 54
Win 2000, Win XP, Win 2003, Linux
Delphi 2006 Prof.
|
Verfasst: Fr 14.10.05 21:58
Du kannst danach einfach noch ein
Delphi-Quelltext 1:
| s := StringReplace('#', #13#10, s); |
darüber laufen lassen.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 14.10.05 22:04
Hallo,
je nach dem wo der Umbruch eingefügt werden soll.
mitten im Text:
RichEdit1.SelText := #13#10;am Ende der Zeilen:
Delphi-Quelltext 1: 2:
| RichEdit1.Lines.Add(''); RichEdit1.SelText := 'Hallo'; |
//Edit: Flocke: oder so 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Fr 14.10.05 22:30
und wo muss ich das in mein code hinsetzen, das wenn man das schreibt "°B°Hallo, # wie geht es dir"
da wo die route taste ist, soll ein zeilenumbruch eingefügt werden, muss ich mein Quellcode umändern? ich danke dir schonaml
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 14.10.05 22:51
Hallo,
wie sieht denn Dein Quellcode jetzt aus, noch so wie mein geposteter Code?
Wenn ja, dann ist es am einfachsten den Code von Flocke so einzubauen:
Delphi-Quelltext 1: 2: 3:
| s := Edit1.Text; s := StringReplace('#', #13#10, s);while Pos('°',s) >0 do |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Fr 14.10.05 23:27
danke, aber ich erhalte ein fehlermeldung "Not enough actual parameters"
es sind zuviele parameter, bei diesem code: s := StringReplace('#', #13#10, s);
was muss ich da umändern, damit es funktioniert, so sieht das inzwischen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.RichEdit2KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); var s : string; begin RichEdit1.Clear; s := RichEdit2.Text; s := StringReplace('#', #13#10, s); while Pos('°',s) > 0 do begin case s[2] of 'B' : RichEdit1.SelAttributes.Color := clBlue; 'R' : RichEdit1.SelAttributes.Color := clRed; 'G' : RichEdit1.SelAttributes.Color := clGray; end; Delete(s,1,3); if Pos('°',s) = 0 then begin RichEdit1.SelText := s end else begin RichEdit1.SelText := Copy(s,1,Pos('°',s)-1); Delete(s,1,Pos('°',s)-1); end; end; end; |
ich danke dir schonmal für die hilfe
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 14.10.05 23:35
Hallo,
ich kenn StringReplace nicht(gibt es in Delphi3 nicht), aber teste das mal:
Delphi-Quelltext 1:
| s := StringReplace('#', '#13#10', s); |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Fr 14.10.05 23:39
da kommt der gleiche fehler!
ich benutze Delphi 7 Enterprise, gibt es noch einen anderes weg, wie man das machen könnte, ich danke dir schonmal
Christian
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Fr 14.10.05 23:54
Hallo,
hab mich mal für Dich kurz umgesehen, so?
Delphi-Quelltext 1:
| s:=StringReplace(s, '#', '#13#10', [rfReplaceAll]); |
in deiner Delphi-Hilfe müsste doch dazu was stehen, oder nicht? 
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|