Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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 user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Fr 14.10.2005 um 23:54
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 12.10.05 18:56 
Zuerst musst Du Dir eine Routine schreiben, die aus deinem Eingabetext Kommandos macht, also z.B.:
ausblenden Quelltext
1:
'~R~Das wird Rot,~B~und ab hier Blau'					

kann z.B. so übersetzt werden
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 13.10.05 13:51 
Hallo,
user profile iconjackie05 hat folgendes geschrieben:
...wenn ich auf Button1 klick, das es dann in RichEdit1 reinkommt, so wie vorschau. geht das, oder nich?...

ja :wink:
und wie, hat user profile iconalzaimar 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
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 13.10.05 16:27 
Hallo,

wie wäre es mit etwas Eigeninitiative :?

user profile iconLannes hat folgendes geschrieben:
...Was hast Du denn bisher versucht?...

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 13.10.05 23:34 
Hallo,
user profile iconjackie05 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:
ausblenden 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[2of //Farbe setzen
      'B' : RichEdit1.SelAttributes.Color := clBlue;
      'R' : RichEdit1.SelAttributes.Color := clRed;
      end;
    Delete(s,1,3);           //hier wird z.B. '°B°' gelöscht
    if Pos('°',s) = 0 then   //keine weitere Farbe mehr
      begin
      RichEdit1.SelText := s //Rest ins Richedit schreiben
      end
      else
        begin                
        RichEdit1.SelText := Copy(s,1,Pos('°',s)-1); //bis nächste Farbe ins RichEdit
        Delete(s,1,Pos('°',s)-1);                    //bis nächste farbe löschen
        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 :gruebel:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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 :D

Christian
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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:

ausblenden 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 :D

Christian
Flocke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

Win 2000, Win XP, Win 2003, Linux
Delphi 2006 Prof.
BeitragVerfasst: Fr 14.10.05 21:58 
Du kannst danach einfach noch ein
ausblenden Delphi-Quelltext
1:
s := StringReplace('#'#13#10, s);					

darüber laufen lassen.
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
  RichEdit1.Lines.Add('');
  RichEdit1.SelText := 'Hallo';


//Edit: Flocke: oder so :wink:

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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 :D

Christian
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: 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 user profile iconFlocke so einzubauen:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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:


ausblenden 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[2of //Farbe setzen
      'B' : RichEdit1.SelAttributes.Color := clBlue;
      'R' : RichEdit1.SelAttributes.Color := clRed;
      'G' : RichEdit1.SelAttributes.Color := clGray;
      end;
    Delete(s,1,3);           //hier wird z.B. '°B°' gelöscht
    if Pos('°',s) = 0 then   //keine weitere Farbe mehr
      begin
        RichEdit1.SelText := s //Rest ins Richedit schreiben
      end
      else
        begin
        RichEdit1.SelText := Copy(s,1,Pos('°',s)-1); //bis nächste Farbe ins RichEdit
        Delete(s,1,Pos('°',s)-1);                    //bis nächste farbe löschen
        end;
        end;
end;



ich danke dir schonmal für die hilfe :)

Christian
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 14.10.05 23:35 
Hallo,

ich kenn StringReplace nicht(gibt es in Delphi3 nicht), aber teste das mal:
ausblenden Delphi-Quelltext
1:
s := StringReplace('#''#13#10', s);					

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Fr 14.10.05 23:54 
Hallo,

hab mich mal für Dich kurz umgesehen, so?
ausblenden 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 )