AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TEdit Cursorposition verwenden

Ein Thema von tcoman · begonnen am 27. Jul 2016 · letzter Beitrag vom 3. Aug 2016
Antwort Antwort
Seite 1 von 2  1 2      
tcoman
(Gast)

n/a Beiträge
 
#1

TEdit Cursorposition verwenden

  Alt 27. Jul 2016, 17:13
Hallo liebe DP-Gemeinde,

ich kaempfe seit einiger Zeit mit einem wohl nichtigen Problem.
Also, ich habe eine TEdit und eine TListBox Componente auf dem
Formular. Die TListBox wird mit Woertern gefuellt, "Eins ", "Zwei ",
usw.

Das TEdit Feld ist leer.
Nun schreibe ich etwas da hinein, zB. "und ist Drei".
Das TEdit Feld hat den Focus und man sieht den TextCursor am
Ende des Textes blinken.

Jetzt setze ich mit dem Mauszeiger den TextCursor vor dem i
von "ist". Wenn ich nun mit dem Mauszeiger in die TListBox
auf die Zeile "Zwei " klicke, moechte ich, dass dieser Text
in das TEdit Feld an der Position vor dem i eingesetzt wird.
Es muesste jetzt dort "und Zwei ist Drei" stehen.

Leider fuegt mir mein Programm den Text am Ende des Textes an,
so dass nur "und ist DreiZwei " steht.

Meine Frage: Wie kann ich mir die Mauszeiger Position merken,
und den Text dort eintragen?

Jeder Hinweis ist willkommen.
MfG,
Terence

Geändert von tcoman (27. Jul 2016 um 17:15 Uhr) Grund: Rechtschreibung korrigiert
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: TEdit Cursorposition verwenden

  Alt 27. Jul 2016, 17:19
Leider fuegt mir mein Programm den Text am Ende des Textes an,
Zeig mal, was du da machst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
703 Beiträge
 
Delphi 12 Athens
 
#3

AW: TEdit Cursorposition verwenden

  Alt 27. Jul 2016, 19:46
Schau dir mal TEdit.Seltext an.
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#4

AW: TEdit Cursorposition verwenden

  Alt 31. Jul 2016, 15:51
Schau dir mal TEdit.Seltext an.
Danke, werde ich probieren.
Sobald ich eine Loesung habe, kommt die hier mit rein.
Ich probiere z.Zt. mit der CursorPosition im TCanvas des
TEdit-Feldes herum, um die Buchstabenstelle zu errechnen,
wo der Text eingefuegt werden soll...

Wahrscheinlich uebersehe ich wieder mal das Naechstliegende
und kompliziere alles nur, aber egal, dabei lernt man auch
was.

@Uwe Raabe : Beispiel kommt, danke Dir.

MfG,
Terence

Geändert von tcoman (31. Jul 2016 um 15:52 Uhr) Grund: Danke an Uwe Raabe hinzugefuegt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: TEdit Cursorposition verwenden

  Alt 31. Jul 2016, 16:00
Das Allernaheliegenste übersiehst du immernoch. [edit] Oh, ein Edit. [/edit]

Delphi-Quellcode:
Leider fuegt mir mein Programm den Text am Ende des Textes an,
so dass nur "und ist DreiZwei " steht.
Wie wäre es, wenn du zeigst, wie du das machst, damit man besser sehn kann, was du falsch machst?


TEdit.SelStart, TEdit.SelLength, TEdit.SelText ...
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#6

AW: TEdit Cursorposition verwenden

  Alt 31. Jul 2016, 16:53
Wie wäre es, wenn du zeigst, wie du das machst, damit man besser sehn kann, was du falsch machst?
Ähemm! #2
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: TEdit Cursorposition verwenden

  Alt 31. Jul 2016, 19:31
Andere Posts zu lesen ist in Dresden grundsätzlich out
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#8

AW: TEdit Cursorposition verwenden

  Alt 1. Aug 2016, 04:24
Pssst, hatte ich gesehn, aber da er geantwortet hatte, ohne darauf einzugehn ....

nja, abgesehn von seinem nachträglichem EDIT
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#9

AW: TEdit Cursorposition verwenden

  Alt 1. Aug 2016, 08:58
Ich probiere z.Zt. mit der CursorPosition im TCanvas des
TEdit-Feldes herum, um die Buchstabenstelle zu errechnen,
wo der Text eingefuegt werden soll...

Wahrscheinlich uebersehe ich wieder mal das Naechstliegende
und kompliziere alles nur, aber egal, dabei lernt man auch
was.

Wenn der Cursor (eigentlich das Caret) im Edit-Control an der richtigen Stelle steht und kein Text darin markiert ist, dann fügt die Zuweisung

  Edit1.SelText := 'Was auch immer';

den Text an der entsprechenden Stelle ein. Da muss man nichts berechnen oder sonstwas tun.

Wenn im Edit ein Text markiert ist, wird dieser durch den zugewiesenen ersetzt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
tcoman
(Gast)

n/a Beiträge
 
#10

AW: TEdit Cursorposition verwenden

  Alt 1. Aug 2016, 16:33
Leider fuegt mir mein Programm den Text am Ende des Textes an,
Zeig mal, was du da machst.
Nach reichlich probieren habe ich folgendes produziert.

Scheitert weiterhin daran, dass es mir nicht gelingt
die CursorPosition des TEdit Feldes zu bestimmen...

Delphi-Quellcode:
unit PEnhInpText_Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TPEnhInpText = class(TForm)
    Edit1: TEdit;
    ListBox1: TListBox;
    bExit: TBitBtn;
    Label1: TLabel;
    Label2: TLabel;
    procedure ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
                                Shift: TShiftState; X, Y: Integer);
    procedure Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
                             Shift: TShiftState; X, Y: Integer);
    procedure bExitClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
    prvCursorPosition : integer;
  public
    { Public-Deklarationen }
  end;

var
  PEnhInpText: TPEnhInpText;

implementation

{$R *.dfm}

{------------------------------------------------------------------------------}

procedure TPEnhInpText.FormCreate(Sender: TObject);
begin
{-}
KeyPreview:=False;
BorderStyle:=bsSingle;
FormStyle:=fsNormal;
ClientWidth:=600+8;
ClientHeight:=600+8;
Color:=clSkyBlue;
Font.Name:='Tahoma';
Font.Size:=10;
Position:=poDesktopCenter;
Caption:='PEnhInpText - Test Example for wwww.delphipraxis.net';
{-}
Application.Title:='PEnhInpText';
Application.HintHidePause:=30000;
Application.HintPause:=0;
{-}
{-}
prvCursorPosition:=0;
{-}
{-}
ListBox1.SetBounds(4, 4, 300, 600-30);
ListBox1.MultiSelect:=False;
ListBox1.Sorted:=False;
ListBox1.ShowHint:=True;
ListBox1.Hint:='ListBox';
ListBox1.TabOrder:=2;
ListBox1.Color:=clMoneyGreen;
ListBox1.Clear;
ListBox1.Items.Add('One ');
ListBox1.Items.Add('Two ');
ListBox1.Items.Add('Three ');
ListBox1.Items.Add('Four ');
ListBox1.Items.Add('Five ');
{-}
{-}
Label1.SetBounds(300+8, 300-3*26, 300-4, 3*26);
Label1.AutoSize:=False;
Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition)+#13+
                'Xmousedown: 0'+#13+
                'Xcanvas: 0';
{-}
{-}
Edit1.SetBounds(300+8, 300, 300-4, 26);
Edit1.ShowHint:=True;
Edit1.Hint:='TEdit';
Edit1.AutoSize:=False;
Edit1.TabOrder:=1;
Edit1.Color:=clMoneyGreen;
Edit1.Text:='and is Three';
{-}
{-}
Label2.SetBounds(300+8, 300+26, 300-4, 300-26-26);
Label2.AutoSize:=False;
Label2.Caption:='Click with mouse into TEdit calculates'+#13+
                'the CursorPosition.'+#13+
                #13+
                'Use Keys Pos1, Left, Right, End'+#13+
                'gives CursorPosition.'+#13+
                #13+
                'Click into TListBox to select'+#13+
                'a line and insert this text into'+#13+
                'text of TEdit at CursorPosition.'+#13+
                #13+
                'Move new CursorPosition after inserted'+#13+
                'text.';
{-}
{-}
bExit.SetBounds(4, 600-22, 64, 26);
bExit.Caption:='E&xit';
bExit.TabOrder:=0;
{-}
{-}
end;

{------------------------------------------------------------------------------}

procedure TPEnhInpText.bExitClick(Sender: TObject);
begin
Close;
end;

{------------------------------------------------------------------------------}

procedure TPEnhInpText.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
                                      Shift: TShiftState; X, Y: Integer);
var i, xcanvas : integer;

begin
{-}
{-!!! here are my troubles. Need an idea, how to calculate-}
{-!!! the correct CursorPosition. Work with Canvas formular-}
{-}
for i:=1 to Length(Edit1.Text)+1 do begin
    xcanvas:=Canvas.TextWidth(copy(Edit1.Text+' ', 1, i));
    if (X < xcanvas) then begin
       prvCursorPosition:=i-1;
       break;
    end;
end;
{-}
Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition)+#13+
                'Xmousedown: '+IntToStr(X)+#13+
                'Xcanvas: '+IntToStr(Xcanvas);
{-}
end;

{------------------------------------------------------------------------------}

procedure TPEnhInpText.Edit1KeyUp(Sender: TObject; var Key: Word;
                                  Shift: TShiftState);
begin
{-}
if (Key = VK_HOME) then begin
   Key:=0;
   prvCursorPosition:=0;
   Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition);
end;
{-}
if ((Key = VK_LEFT) or (Key = VK_BACK)) then begin
   Key:=0;
   dec(prvCursorPosition);
   if (prvCursorPosition < 0) then prvCursorPosition:=0;
   Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition);
end;
{-}
if (Key = VK_RIGHT) then begin
   Key:=0;
   inc(prvCursorPosition);
   if (prvCursorPosition > Length(Edit1.Text)) then prvCursorPosition:=Length(Edit1.Text);
   Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition);
end;
{-}
if (Key = VK_END) then begin
   Key:=0;
   prvCursorPosition:=Length(Edit1.Text);
   Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition);
end;
{-}
end;

{------------------------------------------------------------------------------}

procedure TPEnhInpText.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var sListBox,
    sEdit : string;
begin
{-}
sListBox:=ListBox1.Items.Strings[ListBox1.ItemIndex];
sEdit:=Edit1.Text;
Insert(sListBox, sEdit, prvCursorPosition);
Edit1.Text:=sEdit;
inc(prvCursorPosition, Length(sListBox));
Label1.Caption:='CursorPosition: '+IntToStr(prvCursorPosition);
{-}
end;

{------------------------------------------------------------------------------}

end.
MfG,
Terence
Miniaturansicht angehängter Grafiken
penhinptext.jpg  
Angehängte Dateien
Dateityp: zip PEnhInpText-Test.zip (228,1 KB, 2x aufgerufen)

Geändert von tcoman ( 1. Aug 2016 um 16:38 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz