AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi wie erfahre ich in der Form1 welches Editierfeld gekickt ist
Thema durchsuchen
Ansicht
Themen-Optionen

wie erfahre ich in der Form1 welches Editierfeld gekickt ist

Ein Thema von binio · begonnen am 29. Feb 2008 · letzter Beitrag vom 20. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von binio
binio

Registriert seit: 25. Nov 2005
Ort: Werl, Iserlohn, Dortmund, Hagen
85 Beiträge
 
Delphi 2006 Professional
 
#1

wie erfahre ich in der Form1 welches Editierfeld gekickt ist

  Alt 29. Feb 2008, 11:41
Habe eine Form1 mir zig Editierfeldern
Möchte jetzt die Einfüge-Taste realisieren.
Diese Taste kennt man von Word oder anderen editiertools.
Hier bis jetzt mein Code:
Delphi-Quellcode:
procedure TForm1.StringEditKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  {mit der [Einfg]-Taste zwischen Einfüge- und Überschreibmodus wechseln}
  if (Key=VK_Insert) and (Shift=[]) then
    schreibmodus.Checked:=not schreibmodus.Checked;
end;
Delphi-Quellcode:
procedure TForm1.StringEditKeyPress(Sender: TObject; var Key: Char);
var Zeile : string;
    CursorPos : integer;
begin
  if schreibmodus.Checked then begin
    if Key<#32 then
      Key:=#0
    else begin
      {Aktuelle Einfügeposition merken}
      CursorPos:=StringEdit.SelStart;
      {Memotext in einer string-Variablen zwischenspeichern}
      Zeile:=StringEdit.Text;
      {Falls sich an der aktuellen Cursorposition ein
      Windows-Zeilenumbruch befindet, müssen zwei
       Zeichen (#13=CR und #10=LF) gelöscht werden:}

      if (Zeile[CursorPos+1]=#13) and (Zeile[CursorPos+2]=#10) then
        delete(Zeile,CursorPos+1,1);
      {Das Zeichen an der Einfügeposition löschen}
      delete(Zeile,CursorPos+1,1);
      {Memotext aus der string-Variablen zurückladen}
      StringEdit.Text:=Zeile;
      StringEdit.SelStart:=CursorPos;
    end;
  end;
end;
WIe man in den Beispiel sieht gibt es probleme wenn ich das für gut 50 Editierfeldern einzeln machen muss. Daher mein ansatz in der Form1 ein KeyPress zu programmieren der ermittelt welches Editierfeld ausgewählt wurde um dann mein Code auszuführen.

Meine bischerigen Ansätze waren:
Delphi-Quellcode:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
showmessage(TObject.ClassName);
showmessage(TObject.MethodName(TObject.MethodAddress("StringEdit")));
end;
Ich hoffe doch das mein vorhaben überhaupt machbar ist
if(copy_paste==false)
Programmierer=Hilflos;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 11:47
Mir fallen spontan 2 Möglichkeiten ein: entweder die Methode allgemein machen (d.h. Sender auswerten) und jedem Edit zuweisen oder ActiveControl abfragen.
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 11:47
Du kannst alle Edits mit der selben Eventmethode verbinden. Das auslösende edit steht dann im Parameter Sender.

(Sender as TEdit).<Methode> bzw. Property
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von binio
binio

Registriert seit: 25. Nov 2005
Ort: Werl, Iserlohn, Dortmund, Hagen
85 Beiträge
 
Delphi 2006 Professional
 
#4

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:08
Die Idee von mkinzler gefällt mir sehr...
Nur weiss ich nicht die das zu verstehen ist.
Also ich habe jetzt eine Procedure meiner Form1 hinzugefügt und allen Editierfeldern diese beim KeyPress Event zugeordnet. Wie komme ich den Jetzt mit Sender an die Klassennamen?

Delphi-Quellcode:
procedure TForm1.einfuegemodus(Sender: TObject; var Key: Char);
begin
  with (Sender as TEdit).<Methode> do
      begin
        showmessage(ClassName);
      end;
end;
if(copy_paste==false)
Programmierer=Hilflos;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:09
Delphi-Quellcode:
if Sender is TEdit then
  ShowMessage(TEdit(Sender).Name);
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
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:10
(Sender as TEdit).ClassName Dieser ist aber immer der selbe, wenn alle TEdits sind.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von binio
binio

Registriert seit: 25. Nov 2005
Ort: Werl, Iserlohn, Dortmund, Hagen
85 Beiträge
 
Delphi 2006 Professional
 
#7

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:22
Hab nun
Delphi-Quellcode:
procedure TForm1.einfuegemodus(Sender: TObject; var Key: Char);
begin
{if Sender is TEdit then
  ShowMessage(TEdit(Sender).Name);@WORK}


var Zeile : string;
    CursorPos : integer;
begin
  if schreibmodus.Checked then begin
    if Key<#32 then
      Key:=#0
    else begin
      {Aktuelle Einfügeposition merken}
      CursorPos:=TEdit(Sender).Name.SelStart;
      {Memotext in einer string-Variablen zwischenspeichern}
      Zeile:=TEdit(Sender).Name.Text;
      {Falls sich an der aktuellen Cursorposition ein
      Windows-Zeilenumbruch befindet, müssen zwei
       Zeichen (#13=CR und #10=LF) gelöscht werden:}

      if (Zeile[CursorPos+1]=#13) and (Zeile[CursorPos+2]=#10) then
        delete(Zeile,CursorPos+1,1);
      {Das Zeichen an der Einfügeposition löschen}
      delete(Zeile,CursorPos+1,1);
      {Memotext aus der string-Variablen zurückladen}
      TEdit(Sender).Name.Text:=Zeile;
      TEdit(Sender).Name.SelStart:=CursorPos;
    end;
  end;
end;
geht aber nicht er mekert bei CursorPos:=TEdit(Sender).Name.SelStart;...
if(copy_paste==false)
Programmierer=Hilflos;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:23
Lass den Namen weg:TEdit(Sender).SelStart;
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 binio
binio

Registriert seit: 25. Nov 2005
Ort: Werl, Iserlohn, Dortmund, Hagen
85 Beiträge
 
Delphi 2006 Professional
 
#9

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:27
Schade das es kein Smile für "mir ist ein Licht aufgegangen" gibt
Aber ein für deine Antwort gibt es und ein für meine Frage
Danke Jungs !!!
if(copy_paste==false)
Programmierer=Hilflos;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: wie erfahre ich in der Form1 welches Editierfeld gekickt

  Alt 29. Feb 2008, 12:39
<--
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
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 19:10 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