Hi, Leute.
Will mich kurz vorstellen. Bin ein ganz "normaler" EDV-Fuzzi in einem hamburger Verlag.<BR>
Baue Netzwerke (NOVELL,WINDOOFS,LINUX), schraube Rechner und mach ganz normale<BR>
Anwendungsentwicklung und Schnittstellenprogramierung in DELPHI. Ich habe großen Respekt<BR>
vor sog. "BitVerbiegern" und ich muß gestehen, daß manche der hier gestellten Anfragen<BR>
über meinen Horizont gehen.<BR><BR>
<B>ABER ich hab' da auch mal ne Frage:</B>
Ich habe vor 12 Jahren mal in AMBER (modulare Programmierung unter DOS)<BR>
eine Auftragsverwaltung für ein Kurierunternehmen geschrieben und will diese nun <BR>
endlich in DELPHI erneuern.<BR><BR>
Diese Auftragsverwaltung hat natürlich mehrere Forms. Pro Form steuere das Durchlaufen<BR>
der Eingabefelder über KeyPress und KeyDown.<BR><BR>
Das Durchlaufen der Eingabefelder ist nur mit den Tasten RETURN, KEY_UP und KEY_DOWN möglich<BR>
(Tabulatortaste wird abgefangen).<BR><BR>
Im Moment ist es so, daß ich die KeyDown-Routine auf <B>JEDER</B> Form einsetze.<BR>
Da ich kein großer Freund von redundantem Code bin, möchte ich diese "KeyEvents" gerne<BR>
in eine Lib auslagern.<BR><BR>
Ich übergebe also die aufrufende Form an die Lib und prüfe, ob ich in einem gültigen Eingabefeld stehe.<BR><BR>
Leider kann ich nicht testen, ob das funktioniert, weil DELPHI den Kram nicht compilieren will.<BR><BR>
Ich denke, es liegt daran, daß DELPHI zum Entwicklungszeitpunkt die Form<BR>
(die in der Lib ja nur eine Variable ist) noch gar nicht kennt und dementsprechend mit dem<BR>
<B>SelectNext</B> nichts anfangen kann.<BR><BR>
Ich hoffe, Ihr versteht, was ich will.<BR><BR>
Habe ich mich da völlig verzettelt oder fehlt mir nur ein kleiner Kick ?<BR>
Ist sowas überhaupt machbar ?<BR><BR>
Für Hilfe bin äußerst dankbar.<BR><BR>
Habe den entspr. Code aus meiner Lib unten eingefügt.<BR><BR><BR>
<PRE>
Unit myLib
<B>Type</B> TKeyProcess = <B>object</B><BR>
<B>procedure</B> FormKeyDown(aForm: TForm; Sender: TObject; var Key: Word; Shift: TShiftState);<BR>
<B>end</B>;
<BR><BR>
...
...
...<BR><BR>
<B>var</B>
ke : TKeyProcess;
<BR>
//************************************************** *****************************************
<BR>
procedure TKeyProcess.FormKeyDown(aForm: TForm; Sender: TObject; var Key: Word; Shift: TShiftState);
var
bDirection : Boolean;
nTab : TTabOrder;
<BR>
begin
<BR>
case key of
<BR>
VK_RETURN : bDirection := True;
VK_UP : bDirection := False;
VK_DOWN : bDirection := True;
VK_ESCAPE : aForm.Close;
<BR>
end;
<BR>
with aForm do
begin
<BR>
if (( key = VK_RETURN ) or ( key = VK_UP ) or ( key = VK_DOWN )) and
(( aForm.ActiveControl is Tedit ) or ( aForm.ActiveControl is TCheckBox ) or
( aForm.ActiveControl is TRadioButton)) then
begin
<BR>
nTab := aForm.ActiveControl.TabOrder;
SelectNext(aForm.ActiveControl,bDirection,true);
while not ((aForm.ActiveControl is Tedit) or (aForm.ActiveControl is TCheckBox) or
(aForm.ActiveControl is TRadioButton)) do
SelectNext(aForm.ActiveControl,bDirection,true);
<BR>
end;
<BR>
end;
<BR>
end;
<BR>
//************************************************** *****************************************
<BR>
END.
Will mich kurz vorstellen. Bin ein ganz "normaler" EDV-Fuzzi in einem hamburger Verlag.<BR>
Baue Netzwerke (NOVELL,WINDOOFS,LINUX), schraube Rechner und mach ganz normale<BR>
Anwendungsentwicklung und Schnittstellenprogramierung in DELPHI. Ich habe großen Respekt<BR>
vor sog. "BitVerbiegern" und ich muß gestehen, daß manche der hier gestellten Anfragen<BR>
über meinen Horizont gehen.<BR><BR>
<B>ABER ich hab' da auch mal ne Frage:</B>
Ich habe vor 12 Jahren mal in AMBER (modulare Programmierung unter DOS)<BR>
eine Auftragsverwaltung für ein Kurierunternehmen geschrieben und will diese nun <BR>
endlich in DELPHI erneuern.<BR><BR>
Diese Auftragsverwaltung hat natürlich mehrere Forms. Pro Form steuere das Durchlaufen<BR>
der Eingabefelder über KeyPress und KeyDown.<BR><BR>
Das Durchlaufen der Eingabefelder ist nur mit den Tasten RETURN, KEY_UP und KEY_DOWN möglich<BR>
(Tabulatortaste wird abgefangen).<BR><BR>
Im Moment ist es so, daß ich die KeyDown-Routine auf <B>JEDER</B> Form einsetze.<BR>
Da ich kein großer Freund von redundantem Code bin, möchte ich diese "KeyEvents" gerne<BR>
in eine Lib auslagern.<BR><BR>
Ich übergebe also die aufrufende Form an die Lib und prüfe, ob ich in einem gültigen Eingabefeld stehe.<BR><BR>
Leider kann ich nicht testen, ob das funktioniert, weil DELPHI den Kram nicht compilieren will.<BR><BR>
Ich denke, es liegt daran, daß DELPHI zum Entwicklungszeitpunkt die Form<BR>
(die in der Lib ja nur eine Variable ist) noch gar nicht kennt und dementsprechend mit dem<BR>
<B>SelectNext</B> nichts anfangen kann.<BR><BR>
Ich hoffe, Ihr versteht, was ich will.<BR><BR>
Habe ich mich da völlig verzettelt oder fehlt mir nur ein kleiner Kick ?<BR>
Ist sowas überhaupt machbar ?<BR><BR>
Für Hilfe bin äußerst dankbar.<BR><BR>
Habe den entspr. Code aus meiner Lib unten eingefügt.<BR><BR><BR>
<PRE>
Unit myLib
<B>Type</B> TKeyProcess = <B>object</B><BR>
<B>procedure</B> FormKeyDown(aForm: TForm; Sender: TObject; var Key: Word; Shift: TShiftState);<BR>
<B>end</B>;
<BR><BR>
...
...
...<BR><BR>
<B>var</B>
ke : TKeyProcess;
<BR>
//************************************************** *****************************************
<BR>
procedure TKeyProcess.FormKeyDown(aForm: TForm; Sender: TObject; var Key: Word; Shift: TShiftState);
var
bDirection : Boolean;
nTab : TTabOrder;
<BR>
begin
<BR>
case key of
<BR>
VK_RETURN : bDirection := True;
VK_UP : bDirection := False;
VK_DOWN : bDirection := True;
VK_ESCAPE : aForm.Close;
<BR>
end;
<BR>
with aForm do
begin
<BR>
if (( key = VK_RETURN ) or ( key = VK_UP ) or ( key = VK_DOWN )) and
(( aForm.ActiveControl is Tedit ) or ( aForm.ActiveControl is TCheckBox ) or
( aForm.ActiveControl is TRadioButton)) then
begin
<BR>
nTab := aForm.ActiveControl.TabOrder;
SelectNext(aForm.ActiveControl,bDirection,true);
while not ((aForm.ActiveControl is Tedit) or (aForm.ActiveControl is TCheckBox) or
(aForm.ActiveControl is TRadioButton)) do
SelectNext(aForm.ActiveControl,bDirection,true);
<BR>
end;
<BR>
end;
<BR>
end;
<BR>
//************************************************** *****************************************
<BR>
END.
Comment