Entwickler-Ecke

Sonstiges (Delphi) - EDIT1


blattlaus - Fr 17.01.03 15:02
Titel: EDIT1
hallo, meine frage ist nicht leicht zu stellen, ich hoffe ihr versteht es trotzdem. wenn ich ein eingabefenster mit edit erstelle, ich nun den text eingegeben habe, der länger ist, als das eingabefenster und ich nun die löschtaste drücke, geht der cursor bis an die 5-6 stelle und zeigt den noch zu löschenden text an. das heißt: der cursor geht an die 5-6 stelle lösche den text(cursor geht zur 1. stelle dann wieder an die 5-6 stelle usw.)nachteil ist daher, man weiß nicht wie lang der text eigentlich noch ist, bevor ich an die 1. stelle wieder gelange. meine frage nun:
gibt es eine möglichkeit beim löschen, daß der cursor immer an der letzten stelle im eingabefenster bleibt, und erst dann wieder nach vorne geht, wenn der text kleiner wird als das eingabefenster.
vielen dank fürs verständnis.
ps. noch eine kleine frage: kann man den cursor im eingabefenster ändern, zum beispiel als blinkenden unterstrich, nicht der längsstrich(normal)


foxy - Fr 17.01.03 15:24

also zum Vertsändins .... der Text den du in ein Edit-Feld eingibst iss länger als das editfeld? unn du weist dann nicht, wie lange der Text ist? den du da eingefügt hast?

ich weis es nicht genau aber kann man nicht bei einem Editfeld auch einen scrollbalken hinmachen??
oder versteh ich dich nun komplett falsch :D


foxy - Fr 17.01.03 15:25

also zum Vertsändins .... der Text den du in ein Edit-Feld eingibst iss länger als das editfeld? unn du weist dann nicht, wie lange der Text ist? den du da eingefügt hast?

ich weis es nicht genau aber kann man nicht bei einem Editfeld auch einen scrollbalken hinmachen??
oder versteh ich dich nun komplett falsch :D

also wie ka bei ner listbox fsBoth
dann haste horz. und ein vertikaler balken .... weis aber nicht ob das bei nem edit auch geht must du ma versuchen


blattlaus - Fr 17.01.03 15:48
Titel: edit
hallo, vielen dank für die antwort, das war aber leider nicht die frage.also nochmal langsam.du hast ein eingabefenster mit edit1 erstellt. nun gebe ich beim laufendem programm einen text ein der länger ist als das eingabefenster, soweit noch klar ?! so, und jetzt drücke ich die löschtaste, der cursor geht bei jedem drücken der löschtaste weiter nach vorne. wenn er an der 1. stelle ist und ich weiter die löschtaste drücke springt der cursor an die 5-6 stelle und zeigt den text an(aber nur 5-6 stellen). ich drücke weiter die löschtaste. der cursor geht wieder nach vorne und an der 1. stelle springt er wieder an die 5-6 stelle.
ich fragte, wie kann ich es programmieren daß der cursor immer an der letzten stelle bleibt, wenn ich die löschtaste drücke, und erst dann weiter nach vorne geht, wenn der text kleiner als das eingabefenster wird.
so, nun dürftest du es eigentlich verstanden haben.
danke im voraus


torstenheinze - Fr 17.01.03 15:54

ich hab verstanden, wa du meinst, aber meinst du mit der löschen taste die back oder die entf taste?
ich fermute die back


blattlaus - Fr 17.01.03 15:59

hallo, ich meine die taste über der return-taste. eine längere taste mit einem pfeil nach links.


torstenheinze - Fr 17.01.03 16:02

ja, genau die meinte ich auch

ich werde mal probieren, eine lösung zu finden
bis dann


torstenheinze - Fr 17.01.03 16:07

tut mir leid, hab vorerst nüscht gefunden

da gibt es aber bestimmt eine eigene funktion des edit feldes


Christian S. - Fr 17.01.03 16:13

@torsten: wenn Du verstanden hast, was er meint, kannst Du es mir erklären? Vielleicht fällt mir was ein...


torstenheinze - Fr 17.01.03 16:22

mein name ist torstenheinze und nicht torsten, torsten ist jemand anderes in diesem forum :wink:

ich werde mal ein bild machen, was das problem verdeutlicht, und dann schicke ich dir es mal per email.

oder du startest mal dein delphi und erstellst ein edit.
nun schreibst du einen seeeeeeeeehhr langeeeeeeeeeentest rein.
nun drückst du die backspace taste, und du bemerkst, das der cursor zurückgeht und gleichzeitig die buchstaben löscht, aber dein "blickfeld" das selbebleibt, bis du den anfang deines blickfeldes mit dem cursor überschreitest, dann siehst du 6 buchstaben in dein blickfeld reinragen und das spiel beginnt von forne.

man versteht es nur, wenn man ein edit erstellt, und einen lanngentext eingibt und wieder mit der zurücktaste löscht, du wirst dann schon die frage verstehen


Christian S. - Fr 17.01.03 17:15

Hi!

Habe ein bisschen herumprobiert und glaube, dass dies eine gute Lösung ist. Erst habe ich nur das KeyUp-Ereignis verwendet, aber dann funktionierte es nicht, wenn die Backspace-Taste gedrückt blieb. So geht es, glaube ich, ganz gut. Das Application.ProcessMessages habe ich rein gemacht, weil man sonst ein Flackern des Cursors sieht. Kann aber auch sein, dass ich mir das nur eingebildet habe. Einfach mal ausprobieren, ob man das auch weglassen kann.


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:
27:
28:
29:
30:
31:
32:
33:
34:
var
  Form1: TForm1;
  backspace : Boolean;

implementation

{$R *.dfm}

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=8 then backspace:=true;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  backspace:=false;
end;

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if backspace then
  begin
    edit1.SelStart:=1;
    edit1.SelStart:=Length(edit1.text);
    Application.ProcessMessages;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  backspace:=false;
end;


MfG,
Peter


torstenheinze - Fr 17.01.03 17:20

hey, die lösung ist echt gut, lob :wink:


torstenheinze - Fr 17.01.03 17:21

das mit dem process message bewirkt auch net viel


blattlaus - Fr 17.01.03 17:24

hallo, peter lustig (oder wie du auch immer heißen magst),
erstmal vielen dank für eine lösung, könntest du mir auch netterweise dazu noch antworten, wie ich den cursor im textfeld ändern kann, z.b. in einen blinkenden unterstrich(nicht der normale längsstrich)?
ich besitze delphi 3 und bin auch sehr zufrieden damit, habe auch einige bücher dazu, aber eine lösung niergends zu finden. wo lernt man das denn...oder von welchem buch, deine lösung muß ich erst mal verdauen....


torstenheinze - Fr 17.01.03 17:25

mache einfach:
edit1.cursor := clmycursor

den musst du vorher einbinden


torstenheinze - Fr 17.01.03 17:29

die methode die Perter aus der Serie angewendet hat, die kann man auch bei Spielen anwenden, die auf ner delphi-form sind.

ich hab auch an sowas gedacht, doch ich bin net draf gekommen


blattlaus - Fr 17.01.03 17:34

hi (hallo hatte ich schon so viele........) :D
erstmal vielen dank für lösungsmöglichkeiten, ich bin euch sehr dankbar, dachte nie, daß mir jemand helfen würde....
daß es auch klappt mit dem forum..alle hochachtung

ich möchte auch die jenigen danken die mir keine lösung bieten konnten....aber ich denke diese frage war jedenfalls eine frage wert, oder ?
man sieht es an den vielen usern, die sich dazu eingeklickt hatten !!


torstenheinze - Fr 17.01.03 17:39

Zitat:
aber ich denke diese frage war jedenfalls eine frage wert, oder ?


na sicher war diese frage es wert gestellt zu werden, und außerdem hilft hier jeder jedem. :wink:


Christian S. - Fr 17.01.03 18:03

Hi!

Fragen sind es immer Wert gestellt zu werden! Und ich kann mich auch nicht erinnern, dass sich schon jemand damit hier im Forum beschäftigt hat.
Ich war überrascht, dass es noch ein Problem beim Edit-Feld gibt, dass noch nicht besprochen worden bzw. kaum bemerkt worden ist.

MfG,
Peter