![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi! da bin ich wieder
Mein erster Gedanke war die Inputbox, der ich einfach den ersten Buchstaben des Users als Vogabe mitgab. Leider habe ich keine Möglichkeit gefunden, den Vorgabetext NICHT zu markieren & den Cursor dahinter zu setzen, damit man gleich nahtlos weiterschreiben kann. Dann hatte ich die Idee, mit "create" ein Editfeld zu bauen (dessen Handle ich ja dann hatte) & den Vorgabe-Text per "sendstring" eintzutragen. Mit "sendstring" deshalb, damit der cursor hinter dem Vorgabetext steht. Das funzt prächtig. Wie Kann ich das Editfeld jetzt dazu überreden, bei Enter wieder die Kontrolle an das Programm zu geben, damit der Inhalt ausgelesen werden kann? Habe dazu ein kleines Programm geschrieben, um besser & schneller testen zu können. Welche Schraube muß ich drehen? Oder ist diese Strategie eine Sackgasse? Code:
rem testprogram für ein eingabefeld, welches einen vorgabetext enthält, der nahtlos
rem weitergeschrieben werden kann & nach enter ausgelesen wird
declare lx%,ly%,br%,ho%
declare enr&
declare txt$
lx% = 20 'spalte für linke obere ecke
ly% = 50 'zeile für linke ober ecke
br% = 300 'breite des eingabefeldes
ho% = 30 'höhe des eingabefeldes
Window 0,0-%maxx,%maxy 'fenstergröße definieren: x,y der linken oberen ecke - x,y der rechten unteren ecke --> in den variablen %maxx & maxY steht die aktuelle grafikauflösung
proc stxt
' übernimmt denn ersten buchstaben des users in ein editfeld damit der user
' den suchbegriff zuende schreiben kann. parameter: buchstabe, der gedrückt wurde
parameters b$
enr& = Create("Edit",%hwnd,"",lx%,ly%,br%,ho%) 'eingabefeld mit startstring erzeugen
setfocus (enr&) 'eingabefocus auf das eingabefeld setzen
sendstring(enr&,b$) 'getipptenn buchstaben in das eingabefeld eintragen
'#### hier soll nach enter der eingegebne string ausgelesen & weiterverarbeitet werden ###
return gettext$(enr&)
endproc
Print "Beim Drücken eines Buchstaben von A-Z oder einer Ziffer wird ein Eingabedialog geöffnet"
Print " ******* ESC = Ende *******"
locate 8,1
While 1 'Schleife für eingabeüberwachung
WaitScan
case %Key = 27 : end 'wenn esc gedrückt wird
'wenn der gedrückte buchstabe a-z oder ein umlaut ist:
if (%Key > 96) and (%Key < 123) or (%Key = 228) or (%Key = 246) or (%Key = 252)
Print "Name,Vorname:",
txt$ = stxt(chr$(%Key))
Print "Der Suchbegriff ist:",txt$
'wenn eine ziffer gedrückt wird (0-9):
elseif (%Key > 47) and (%Key < 58)
Print "8-stellige Nummer:",
txt$ = stxt(chr$(%Key)) 'stxt soll den fertigen suchtext zurückgeben
Print "Der Suchbegriff ist:",txt$ 'Nummer wird als text weiterverarbeitet
endif
EndWhile
end
|
|
|
|
|
|
|
#2 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 05.02.2009
Ort: Westliches NRW
Alter: 44
Beiträge: 5.094
|
Bei einem einfachen Editfeld ist die Entertaste nicht vorgesehen, weil das Feld ja einzeilig ist. Ich denke, da hilft nur Subclassen.
Mit einem Multiedit sollte es aber funktionieren, sofern der Style ES_WANTRETURN gesetzt ist. Notfalls per Control(...) erstellen.
__________________
Gruß, Frank ![]() Webpage http://frabbing.bplaced.net mit Freeware - Tools, Spiele und Grafiken. |
|
|
|
|
|
#3 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Ok Danke, ich probiers mit einem Mehrzeiler...
Gruß Jörg |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
ES_WANTRETURN funktioniert bei beiden Editfeldern.
Ansonsten kannst du dir auch einen Hotkey definieren, nämlich Enter und abfragen ob der Fokus auf dem Feld ist.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#5 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
hmm, jetzt habe ich ein Multiedit mit den style ES_WANTRETURN erstellt:
Code:
...
enr&=Control("EDIT","",1409355780,lx%,ly%,br%,ho%,%HWND,0,%hinstance,0)
setfocus (enr&) 'eingabefocus auf das eingabefeld setzen
sendstring(enr&,b$) 'getipptenn buchstaben in das eingabefeld eintragen
while 1
waitinput
if %key = 13
'#### hier soll nach enter der eingegebne string ausgelesen & weiterverarbeitet werden ###
break
endif
endwhile
return gettext$(enr&)
endproc
Aber auch hier wird das Editfeld nicht nach Enter verlassen. Und solange ich im Editfeld bin, kann ich ja nichts auswerten oder irgendwelche Messages. Nur wenn ich mit der Maus ins Hauptfenster klicke & danach Enter drücke, wird der Suchbegriff zurückgegeben. Gruß Jörg |
|
|
|
|
|
|
#6 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Vielleicht so etwas mit BlindEdit?
Code:
Declare text$
cls
var BE_dlg&=create("Dialog",%hwnd," Datenblatt",240,26,720,630)
var mgl2&=Create("Edit",BE_dlg&,"",140,70,140,22)
var mgl3&=Create("Edit",BE_dlg&,"",0,0,0,0)
SetFocus(mgl2&)
while 1
WaitInput
case %key=2:BREAK
if GetFocus(mgl3&)
text$=GetText$(mgl2&)
MessageBox text$+"\\nnsoll ich suchen?","Daten",$40040
SetFocus(mgl2&)
endif
Wend
End
Geändert von THFR (09.08.2010 um 01:46 Uhr) |
|
|
|
|
|
#7 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi Thomas, genial! ich bau das morgen (oder nachher) in mein prog ein. Muß ich etwas umformen...
Der Test (wie du ihn gebaut hast, funktioniert) Ich mußte nur das "var" entfernen & die entsprechenden Variablen declarieren. Mein xProfan8a wollte da nicht mitspielen. Was genau bewirkt denn Code:
mgl3&=Create("Edit",BE_dlg&,"",0,0,0,0)
Gruß Jörg |
|
|
|
|
|
#8 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Jörg, wenn du mehrere EDIT hintereinander erstellst, werden sie in der erstellten Reihenfolge nach ENTER angesprungen. Hier nun zu diesem Abfragezweck ein "BLIND EDIT", d.h. Lage 0,0 und Größe 0,0 dann ist es nicht zu sehen und eine Eigabe ist auch nicht möglich, aber du kannst es abfragen da es nach ENTER , hier nach mgl2&, den Focus bekommt. An XProfan 8 denke ich beim nächsten Mal.
Gruß Thomas |
|
|
|
|
|
#9 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Ich glaube in allen createWindow oder Createdialog geht es auch ohne Klimmzüge. Beim Haupfenster nur mit Windowstyle 520 , dann kann das Fenster aber in der Größe nicht verändert werden.
Code:
Declare text$,BE_dlg&,mgl2&,lastid%,id_2% '' So ... Windowstyle 520 Window 100,100 - 600,600 mgl2&=CreateEdit(%hwnd,"",140,70,140,22) ''~~~~~~~~~~~~~~~~~~~ '' oder so... 'BE_dlg&=createWindow(%hwnd," Datenblatt",240,26,720,630) 'mgl2&=CreateEdit(BE_Dlg&,"",140,70,140,22) ''~~~~~~~~~~~~~~~~~~~ id_2% = itemid(mgl2&) SetFocus(mgl2&) while 1 lastid% = %itemid WaitInput case %key=2:BREAK if (%key = 13) and (lastid% = id_2%)' text$=GetText$(mgl2&) MessageBox text$,"Diese Daten suchen",$40040 SetFocus(mgl2&) elseif %KEY=4 'Verkleinern/Vergrössern wurde angeklickt SetFocus(mgl2&) endif Wend End |
|
|
|
|
|
#10 (Direktlink) |
|
Weiß worum´s geht
![]() Registriert seit: 08.12.2009
Ort: Mecklenburg
Beiträge: 202
|
Hi Thomas, die Variante mit dem BlindEdit funktioniert gut. Deine 2. Lösung konnte ich leider nicht ausführen (Funktion itemid() gibt es in xProf8a noch nicht) Vllt. sollte ich doch mal auf eine höhere Vers. wechseln..
Hast du mit der Sortierung schon einige Erfahrungen gemacht? Bei meiner Sortierung werden komischerweise die Umlaute nicht vernünftig sortiert. Die sind iwie alle verstreut... also bis dann Gruß Jörg |
|
|
|
|
|
|
#11 (Direktlink) |
|
Stammuser
![]() Registriert seit: 04.04.2009
Ort: Lübeck
Beiträge: 264
|
Hallo Jörg,
das mit dem @ItemId() war in der XPrafan11 Hilfe mit "ab Profan7" gekennzeichnet. In der Hilfe von XProfan8 konnte ich es auch nicht finden. Versuch es eimal ohne. Die Sortierung, Hinweis in der Hilfe suchen, geht glaube ich nach dem ANSI/ASCII-Code. Also A..a..Ä..ä. Hier könnte nur der Umweg über eine dbf gehen. CSV zur dbf. Dbf mit Index und Satzweise in das unsortierte Listview. Nur mit dBaseIII plus getestet. Da kommt Äb...ac..Ad..äf. Gruß Thomas Geändert von THFR (10.08.2010 um 02:06 Uhr) |
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Text in Editfeld einfügen | Jac de Lad | XProfan | 7 | 28.02.2009 15:01 |
| F1 Enter to resueme | Rolf | Windows 95/98/ME/2000/NT | 2 | 17.03.2004 19:33 |