![]() |
Markierter Text in TField
Hoi,
nach ewigem Searchen :wall: entschied ich mich nun doch dafür, eine hoffentlich nicht allzu blöde Frage als Neues Thema zu 'eröffnen': Wie kann ich auf den markierten Text der in meinem DBGrid befindlichen TField-Komponente zugreifen? DBGrid.SelectedField.AsString & DBGrid.SelectedField.Text liefern mir unbefriedigenderweise den gesamten Text des Feldes. Thanx, - se0man |
Re: Markierter Text in TField
Hi!
Gibt es da sowas wie Seltext? Ciao fkerber |
Re: Markierter Text in TField
Ne, leider nicht.
- se0man |
Re: Markierter Text in TField
Es kann doch nicht sein,
dass das nicht möglich ist !? :gruebel: Hat denn niemand eine Idee? |
Re: Markierter Text in TField
Wow!
Bin ich da also schon an die Grenzen von Delphi gestoßen... :-D |
Re: Markierter Text in TField
So,
jetzt bin ich am Punkt meines Programmes angelangt, an dem ich ohne die Lösung dieses Problems, nicht weiter komme. :shock: Habt ihr wirklich keine Hilfen?? :wall: Alles was ich will, ist es auf den markierten Text meines DBGrids (während sich die Zelle im Edit-Modus befindet) zugreifen. Das muss doch irgendwie zu bewerkstelligen sein. Stellt euch vor, ihr steht vor diesem Problem. Was würdet ihr machen?? :gruebel: Dankbar für jede Idee -se0man |
Re: Markierter Text in TField
Habe in DF ne Antwort bekommen:
Code:
function GetStringGridOrDBGridSelText(Grid : TWinControl) : String;
var Wnd : Cardinal; Buf : String; SelStart : Cardinal; SelEnd : Cardinal; begin Wnd:=GetWindow(Grid.Handle,GW_CHILD); SendMessage(Wnd,EM_GETSEL,Integer(@SelStart),Integer(@SelEnd)); SetLength(Buf,SendMessage(Wnd,WM_GETTEXTLENGTH,0,0)+1); SendMessage(Wnd,WM_GETTEXT,Length(Buf),Integer(@Buf[1])); Result:=Copy(Buf,SelStart+1,SelEnd-SelStart); end; Zitat:
|
Re: Markierter Text in TField
Meine Frage jetzt an alle Non-VCL Kids,
(auch an die anderen...): :mrgreen: Wie schaffe ich es nun, einen kopierten Text an der aktuellen Cursor-Position (im Field) einzufügen? :pale: EM_GETSEL gibt mir ja je nach Position (0,1,2,3,...) die seltsamen Werte 0,10001,20002,30003,... aus. Aber hilft mir das weiter? Ich wüsste nicht wie... ciao -se0man |
Re: Markierter Text in TField
Moin!
Entweder ein WM_SETTEXT oder WM_SETSELTEXT senden... MfG Muetze1 |
Re: Markierter Text in TField
thx, für die schnelle Antwort,
WM_SETSELTEXT existiert leider nicht, und WM_SETTEXT ersetzt ja den ganzen Text. Oder gibt es bei zweiterem etwa die Möglichkeit, eine Startposition anzugeben? thx -se0man |
Re: Markierter Text in TField
Moin!
Sorry, die Nachricht heisst EM_REPLACESEL um die Selektion zu ersetzen. Nähere Info's dazu in der ![]() MfG Muetze1 |
Re: Markierter Text in TField
hey,
:thuimb: thxxx !! Genau das was ich benötigte! ...manche Probleme lösen sich ja fast von selbst :zwinker: ciao -se0man |
Re: Markierter Text in TField
:gruebel:
Jetzt noch eine kleine Frage: Ist es nötig, den markierten Text mit '' zu ersetzen, um ihn zu löschen, oder gibt es noch so etwas in der Richtung EM_DELETESEL, (was es ja nicht gibt... :lol: )?? -se0man |
Re: Markierter Text in TField
Ich muss mich verbessern:
Es ist nämlich nicht nur 'nicht nötig', sondern vielmehr 'nicht möglich' das mit EM_REPLACESEL zu machen. Das verursacht eine AV. :wall: Irgendwelche Ideen?? -se0man |
Re: Markierter Text in TField
OK, ich hab es:
Nennt sich WM_CLEAR. thx, trotzdem. -se0man |
Re: Markierter Text in TField
Nun, an dieser Stelle mach ich dann mal eine kleine Zusammenfassung,
dieses Threads, also Cut, Copy and Paste in einem Field.
Code:
thx
procedure Tform1.Cut;
begin // markierten Text kopieren Clipboard.AsText := GetDBGridSelText; // markierten Text löschen SendMessage(GetWindow(DBGrid.Handle,GW_CHILD),WM_CLEAR,0,0); end; procedure Tform1.Copy; begin // markierten Text kopieren Clipboard.AsText := GetDBGridSelText; end; procedure Tform1.Paste; var cardinalClipbrdText: Cardinal; begin // an aktueller Position einfügen cardinalClipbrdText := Cardinal(Clipboard.AsText); // kopierten Text als Cardinal in Variable SendMessage(GetWindow(DBGrid.Handle,GW_CHILD),EM_REPLACESEL,1,cardinalClipbrdText); // Text an aktueller Position ausgeben end; function Tform1.GetDBGridSelText: String; var cardinalWnd, cardinalSelStart, cardinalSelEnd : Cardinal; strBuffer : String; begin cardinalWnd := GetWindow(DBGrid.Handle,GW_CHILD); SendMessage(cardinalWnd,EM_GETSEL,Integer(@cardinalSelStart),Integer(@cardinalSelEnd)); SetLength(strBuffer,SendMessage(cardinalWnd,WM_GETTEXTLENGTH,0,0)+1); SendMessage(cardinalWnd,WM_GETTEXT,Length(strBuffer),Integer(@strBuffer[1])); Result := Copy(strBuffer,cardinalSelStart+1,cardinalSelEnd-cardinalSelStart); end; -se0man |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz