Autor |
Beitrag |
Daniel_K
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: So 13.01.08 04:57
Hallo,
in einem modal Angezeigten Formular befindet sich ein Textfeld. (TEdit)
Im OnExit Ereignis eines Textfeldes findet folgende Plausiprüfung beim verlassen des Feldes statt, die den Anwender nicht aus dem Feld herauslassen soll, ohne einen gültigen Wert einzugeben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm5.FromToolEditExit(Sender: TObject); begin if not (ActiveControl = CancelBB) then begin if not GueltigerWert(FromToolEdit.Text) then begin Fehlermeldung('Bitte einen gültigen Wert eingeben'); FromToolEdit.SetFocus; FromToolEdit.SelectAll; end; end; end; |
Da ActiveControl bei onExit bereits die Komponente enthält, die den Fokus bekommen soll, prüfe ich (hier in Zeile 3) ob das Formular über den Abbrechen-Button verlassen werden soll, da dann die Plausibilitätskontrolle der Eingaben des Feldes überflüssig sind.
Klickt der Anwender jetzt auf den Abbrechen-Button des Formulars, wird die OnExit-Procedure des Eingabefeldes ausgelöst, bevor der Anwender die Maustaste los läßt  .
Bewegt der Anwender nun den Mauszeiger von dem Abbrechen-Button herunter und läßt erst dann die Maustaste los, wird das Formular nicht verlassen.
Das Eingabefeld hat aber den Fokus ohne Plausi-Prüfung verloren.
Ab jetzt kann so ziemlich alles schief laufen.
Was kann ich dagegen tun, außer bei MausDown auf dem Abbrechen-Button den ModalResult auf mrCancel zu setzen, oder den Anwender zu zwingen eine nicht korrekte Eingabe zu korrigieren bevor er den Dialog abbrechen darf?
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Mi 16.01.08 11:18
Titel: Re: onExit eines TEdit nicht bei Abbrechen-Button (modalForm
Hi
Daniel_K hat folgendes geschrieben: |
Klickt der Anwender jetzt auf den Abbrechen-Button des Formulars, wird die OnExit-Procedure des Eingabefeldes ausgelöst, bevor der Anwender die Maustaste los läßt .
|
das ist logisch. Probiers mal so: Das ModalResult des Cancel-Buttons leer lassen. Beim OnClick deine Prüfung von oben anwerfen. Wenn die Überprüfung ok ist, dann von Hand Form.ModalResult:=mrCancel setzen
Daniel_K hat folgendes geschrieben: |
Bewegt der Anwender nun den Mauszeiger von dem Abbrechen-Button herunter und läßt erst dann die Maustaste los, wird das Formular nicht verlassen.
|
in diesem Fall ist es kein "Knopfdruck" (Windowsstandard)
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Do 17.01.08 01:05
Hi, besten Dank Xion für deine Mühe, aber ich glaube ich hab die Frage zu verwirrend Formuliert (oder deine Antwort nicht verstanden)
Wenn der User den Abbrechen Button klickt, muß keine Plausiprüfung stattfinen, da dann das Formular ohne Berücksichtigung der Eingaben geschlossen wird.
Mein Problem ist "lediglich", daß ich bei onExit des Edit-Feldes nicht Feststellen kann, ob der User die Maustaste auf dem Abbrechen Button nur herunterdrückt, oder dort auch wieder losläßt und nur dann das onCLick des Cancel Button wirklich auslöst.
Drückt er Ihn nämlich nur herunter, hat das Edit-Feld ohne die Plausiprüfung in Zeile 4 des Codes den Focus verloren.
Bis jetzt umgehe ich das Problem, in dem ich die Abfrage in Zeile 3 des Codes (in der die Plausiprüfung inaktiviert wird, falls der Abbrechen-Button den Focus bekommen soll) herausgelassen habe.
Dieses wiederum führt dazu, daß ein Anwender der eine Falsche oder noch unvollständige Eingabe in dem Editfeld gemacht hat und das Formular eigentlich nur Abbrechen möchte (somit wäre egal das die Eingabe falsch ist), gezwungen wird eine korrekte Eingabe zu machen, bevor er Abbrechen kann. (würde ich als Anwender als Bug bezeichnen)
Sollte ich keinen neuen Lösungsansatz mehr erhalten, bin ich wohl gezwungen, die Plausiprüfung erst bei onCLick des OK-Buttons zu machen. Wäre sehr sehr schade, in dem Formular sind nämlich noch etliche andere Felder, z.B. Spin-Buttons deren zulässige Wertebereiche von einträgen in anderen Komponenten Abhängig sind. Daher war die Plausiprüfung bei OnExit der einzelnen Komponenten ideal.
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Do 17.01.08 01:17
Hallo,
ich würde den OK-Button solange deaktivieren bis alle Eingaben ausreichend sind.
Also versuchen eine Plausibilitätsprüfung während der Eingabe zu realisieren.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
uwewo
      
Beiträge: 154
|
Verfasst: Do 17.01.08 08:41
Hallo,
vielleicht bringt dich das auf neue Ideen.
Button.OnMouseLeave
Button.OnMouseDown
Button.OnMouseUp
|
|
Böser Borstel
      
Beiträge: 154
|
Verfasst: Fr 18.01.08 11:32
Ich habe es hinbekommen mit viel getrixe und unsauberer Programmierung -> je nach Rechner muß der FTimer.Interval richtig gesetzt werden.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84:
| unit Unit2;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls;
type TForm2 = class(TForm) Edit1: TEdit; Button1: TButton; Button2: TButton; procedure Edit1Exit(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormShow(Sender: TObject); private FTest : Boolean; FTimer : TTimer; procedure FOnTimer(Sender: TObject); public end;
var Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.Edit1Exit(Sender: TObject); begin if (Edit1.Text <> '1') and (FTest = FALSE) then begin FTimer.Enabled := TRUE; end; end;
procedure TForm2.Button2Click(Sender: TObject); begin Close; end;
procedure TForm2.FormCreate(Sender: TObject); begin FTimer := TTimer.Create(Self); FTimer.Interval := 100; FTimer.OnTimer := FOnTimer; FTimer.Enabled := FALSE; end;
procedure TForm2.FOnTimer(Sender: TObject); begin if (Form2.Visible) and (FTest = FALSE) then begin FTimer.Enabled := FALSE; ShowMessage('Bitte einen gültigen Wert eingeben'); Edit1.SetFocus; Edit1.SelectAll; end; end;
procedure TForm2.Button2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FTest := TRUE; end;
procedure TForm2.FormShow(Sender: TObject); begin FTest := FALSE; FTimer.Enabled := FALSE; end;
end. |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Fr 18.01.08 13:35
Hallo,
kannst du nicht einfach die Eingabe prüfen bevor das Fenster geschlossen wird?
Entweder beim Klick auf den OK Button:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm2.Button2Click(Sender: TObject); begin if EingabeOK then ModalResult:=mrOK; else ShowMessage('Bitte einen gültigen Wert eingeben'); end; |
oder im CloseQuery des Formular?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TForm2.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin if ModalResult=mrOK then if not EingabeOK then begin canClose:=False; ShowMessage('Bitte einen gültigen Wert eingeben'); end; end; |
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Sa 19.01.08 01:08
Sorry, bin gesten nicht dazu gekommen reinzuschauen.
Danke für die vielen Antworten.
SvenAbeln's Idee möchte ich nicht nutzen, da die Eingabefelder voneinander in Ihrer Plausibilität abhängig sind und so der Anwender ziemlich viel verstellt haben könnte, was er dann alles wieder gerade biegen muß oder von vorne beginnen müsste.
bei Lannes' Idee wird der Anwender ziemlich allein gelassen, er muß solange "rumprobieren" plausible Eingaben zu machen, bis der OK-Button erscheint. OK, man könnte ihn auch irgendwo dabei mit hilfstexten oder ähnlichem unterstützen, aber finde ich persönlich nicht so gut.
Die Idee vom Bösen Börstel ist sehr interessant, allerdings wie er selbst auch schon gepostet hat ein wenig unsauber. Ich habe mir seine Unit in mein D5 kopiert und ein bisschen mit rumgetestet. Wenn der Anwender nach einer falschen Eingabe zum zweiten mal auf den OK-Button (Button1) klickt, und dabei keine 100ms zwischen mouseDown und MouseUp vergehen läßt, wird OK akzeptiert.
Ich habe nicht genau herausgefunden warum, habe aber meine Tests auch abgebrochen, da mich der Anstoß von uwewo völlig begeistert.
Das Problem dabei ist ich programmiere mit Delphi5. Da gibt es onMouseLeave noch nicht.
Ich kenne mich mit den WindowsMessages noch nicht aus, da ich mich mit dem Thema noch nicht beschäftigt habe.
Ich muß mich in das Thema WindowsMessages mal einlesen, da ich gerade auf Hinweise gestoßen bin, daß man das Ereignis onMouseLeave auch in D5 selbst einem Button zuordnen kann. Wenn ich die Lösung habe, werde ich sie hier posten und den Thread dann auf erledigt schalten.
Danke noch mal für eure große Hilfsbereitschaft.
Gruß, Daniel
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 19.01.08 02:27
Hallo,
schade das Du einen ausgegrauten Ok-Button nicht so schön findest
Die Reihenfolge der Ereignisse ist:
Edit.OnExit
Button.OnClick
Button.OnMouseUp (wird immer ausgelöst)
Probier mal das folgende:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.Edit1Exit(Sender: TObject); begin if not (ActiveControl = btnAbbrechen) then else btnAbbrechen.Tag := Integer(Sender);end;
procedure TForm1.btnAbbrechenClick(Sender: TObject); begin btnAbbrechen.Tag := 0; end;
procedure TForm1.btnAbbrechenMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin If not (btnAbbrechen.Tag = 0) then ActiveControl := TWinControl(btnAbbrechen.Tag); end; |
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Sa 19.01.08 02:51
Hallo Lannes,
diese Idee gefiel mir auch ausgesprochen gut.
Schade nur, daß ich nach implementierung feststellen musste, daß TForm1.btnAbbrechenMouseUp nicht ausgelöst wird, wenn der Anwender wie anfangs beschrieben nach MouseDown den Mauszeiger vom Abbrechen-Button wegbewegt, bevor er den Mousebutton wieder losläst.
Ich bleib am Ball...
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Sa 19.01.08 03:55
uwewo hat folgendes geschrieben: | Hallo,
vielleicht bringt dich das auf neue Ideen.
Button.OnMouseLeave
Button.OnMouseDown
Button.OnMouseUp |
Ich würde die Idee gerne aufgreifen, mein Problem ist aber, daß das Ereignis OnMouseLeave noch nicht in Delphi5 enthalten ist.
Bei meinen recherchen habe ich Aussagen gefunden, die besagen, daß man einem Button das entsprechende Windows-Ereignis CM_MOUSELEAVE hinzufügen kann.
Leider habe ich keine mir einleuchtende Erklärung gefunden wie das gehen soll.
Irgendwie bleibt der Aha-Effect bei mir vollkommen aus.
Kann mir bitte jemand eine Einfache Erklärung dafür geben?
|
|
Lannes
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: Sa 19.01.08 12:40
Hallo,
Daniel_K hat folgendes geschrieben: | Schade nur, daß ich nach implementierung feststellen musste, daß TForm1.btnAbbrechenMouseUp nicht ausgelöst wird, wenn der Anwender wie anfangs beschrieben nach MouseDown den Mauszeiger vom Abbrechen-Button wegbewegt, bevor er den Mousebutton wieder losläst. |
Hab das gerade auch mal in TurboDelphi getestet, wie schon gesagt, MouseUp wird auch dann ausgelöst.
Bau den Code zum Testen doch mal in eine neue Anwendung ein.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 19.01.08 14:37
zu dem OnMouseLeave:
diese Komponente ermöglicht ein OnMouseLeave eines Images. Einfach analog für deinen Button machen und zur Runtime zuweisen (du musst dann wohl den ganzen Button zur Runtime erstellen)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit AdvImage;
interface
uses ExtCtrls,Classes,Messages ;
const WM_MouseEnter = $B013; WM_MouseLeave = $B014;
type TAdvImage = class(TImage) private FOnMouseLeave: TNotifyEvent; FOnMouseEnter: TNotifyEvent; procedure WM_MouseEnter(var Msg: TMessage); message WM_MouseEnter; procedure WM_MouseLeave(var Msg: TMessage); message WM_MouseLeave; procedure SetOnMouseEnter(const Value: TNotifyEvent); procedure SetOnMouseLeave(const Value: TNotifyEvent); published property OnMouseEnter: TNotifyEvent read FOnMouseEnter write SetOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write SetOnMouseLeave; end;
implementation
procedure TAdvImage.WM_MouseLeave(var Msg: TMessage); begin if Assigned(FOnMouseLeave) then FOnMouseLeave(self); end;
procedure TAdvImage.WM_MouseEnter(var Msg: TMessage); begin if Assigned(FOnMouseEnter) then FOnMouseEnter(self); end;
procedure TAdvImage.SetOnMouseEnter(const Value: TNotifyEvent); begin FOnMouseEnter := Value; end;
procedure TAdvImage.SetOnMouseLeave(const Value: TNotifyEvent); begin FOnMouseLeave := Value; end; end. |
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Mo 21.01.08 12:57
Lannes hat folgendes geschrieben: | Hallo,
Daniel_K hat folgendes geschrieben: | Schade nur, daß ich nach implementierung feststellen musste, daß TForm1.btnAbbrechenMouseUp nicht ausgelöst wird, wenn der Anwender wie anfangs beschrieben nach MouseDown den Mauszeiger vom Abbrechen-Button wegbewegt, bevor er den Mousebutton wieder losläst. |
Hab das gerade auch mal in TurboDelphi getestet, wie schon gesagt, MouseUp wird auch dann ausgelöst.
Bau den Code zum Testen doch mal in eine neue Anwendung ein. |
Sorry, du hast absolut recht, hab ich wohl beim letzten Test mist gebaut. Danke dir und auch allen anderen die sich hier beteiligt haben.
|
|
Erichgue
      
Beiträge: 86
Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
|
Verfasst: Mo 21.01.08 14:03
Titel: oder so?
In OnExit deines Edits kannst du folgendes prüfen
Delphi-Quelltext 1: 2:
| if ActiveControl = [DeinAbbruchButton] then else |
Erich
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Di 22.01.08 00:31
Danke für deine Mühe Erichgue, aber wenn du dich darauf verläst, dann solltest du dir entweder den thread nochmal gründlich von beginn an durchlesen, oder in der Anwendung in der du dich darauf verläst mal folgendes machen:
Mache eine falsche Eingabe in ein Feld das bei onExit geprüft wird außer wenn der Abbrechen-Button den Focus bekommen soll.
Klicke dann auf den Abbrechen-Button, lasse die Maustaste nicht los, bewege den Mauszeiger vom Abbrechen-Button herunter und lasse dann die Maustaste los.
Jetzt hat dein Eingabefeld ohne Plausi-Kontrolle den Focus an den Abbrechen-Button abgegeben.
Die Lösung für das Problem steht in Lannes Antwort von Sa 19.01.08 01:27
Da mußt du noch bei dem MouseUp-Event eine Prüfung hinzufügen, ob es auch tatsächlich die linke Maustaste ist, die losgelassen wird, und dann funktioniert es.
|
|
Erichgue
      
Beiträge: 86
Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
|
Verfasst: Di 22.01.08 09:01
Daniel_K hat folgendes geschrieben: | Danke für deine Mühe Erichgue, aber wenn du dich darauf verläst, dann solltest du dir entweder den thread nochmal gründlich von beginn an durchlesen, oder in der Anwendung in der du dich darauf verläst mal folgendes machen:
Mache eine falsche Eingabe in ein Feld das bei onExit geprüft wird außer wenn der Abbrechen-Button den Focus bekommen soll.
Klicke dann auf den Abbrechen-Button, lasse die Maustaste nicht los, bewege den Mauszeiger vom Abbrechen-Button herunter und lasse dann die Maustaste los.
Jetzt hat dein Eingabefeld ohne Plausi-Kontrolle den Focus an den Abbrechen-Button abgegeben.
|
Ok, hatte ich in der Tat diesen Umstand nicht berück sichtig, bzw. nie getestet.
Betrachtet hiermit bitte meinen Vorschlag als nicht geschrieben.
Gruß
Erich
|
|
Erichgue
      
Beiträge: 86
Win XP/2000/7
TurboPacal 7.0; Delphi 2/5/7; BDS 2006/2010/XE6; C#; MSSQl 2000
|
Verfasst: Do 24.01.08 08:54
Titel: Und es geht doch!
Hallo,
ungeachtet dessen, das es hier Teilnehmer gibt, die ihre Arroganz gerne an den Tage legen,
habe ich mir die Problematik nochmals überlegt.
Folgenden Lösungsansatz haben ich gefunden:
Ein Button hat die Eigenschaft ModalResult.
Der Wert von ModalResult wird in die Eigenschaft ModalResult des Formulares geschrieben, wenn der Button gedrückt wird, und bevor das Exit des aktiven Controls aufgerufen wird.
Es ist egal, ob das Formular modal ist oder nicht.
Daraus ergibt sich folgender Ansatz:
Gegeben sei ein TEdit (Edit) und ein TButton (btAbbrechen) mit ModalResult <> 0
Die Methode EditExit ist dem OnExit von Edit zugewiesen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| Procedure TForm1.EditExit(sender : TObject); begin if ModalResult <> btAbbrechen.ModalResult then begin end; end; |
Gruß
Erich
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Sa 26.01.08 02:03
Titel: Re: Und es geht doch!
Erichgue hat folgendes geschrieben: | ...
ungeachtet dessen, das es hier Teilnehmer gibt, die ihre Arroganz gerne an den Tage legen,
...
|
Hallo Erich,
ich denke mal mit dieser Bemerkung meinst du mich
Sorry, wenn das was ich dir geantwortet hatte für dich arrogant klang.
Zunächst möchte ich einmal betonen, daß ich dankbar gegenüber jedem bin, der sich mit meinem Problem beschäftigt.
Denjenigen die mir helfen wollen arrogant zu Antworten ist daher das letzte das ich möchte.
Daniel_K hat folgendes geschrieben: | ...
aber wenn du dich darauf verläst, dann solltest du dir entweder den thread nochmal gründlich von beginn an durchlesen, oder in der Anwendung in der du dich darauf verläst mal folgendes machen:
...
|
Mein Ausdruck "wenn du dich darauf verläst" (evt war es der, der dich stört) bezog sich wirklich darauf, dass ich vermutet hatte, dass du den Fehler
(den ich in etlichen Programmen bereits gemacht hatte, auf den mich überhaupt erst vor kurzem ein neuer sehr guter Betatester aufmerksam gemacht hat)
auch in deiner Programmierung bereits irgendwann mal gemacht hast
(was auch nochmal durch meine Formulierung "in der Anwendung in der du dich darauf verläst" ersichtlich wird).
Meine Empfehlung an dich, dir den Threat nochmal aufmerksam durchzulesen war ehrlich gemeint, und sollte dich davor bewahren, diesen Fehler in Zukunft wieder zu machen, bzw. sollte dir die Chance geben, den Fehler in deinen bereits fertiggestellten Programmen zu korigieren.
Falls du irgendetwas anderes von dem was ich geschrieben habe meinst, dann sag mir bitte was es war.
Da es nach meiner Meinung nur ein Mißverständniss sein kann, werden wir dies dann sicherlich auch beseitigen können.
Danke nochmal für deine Mühe
Daniel
|
|
Daniel_K 
Hält's aus hier
Beiträge: 14
Delphi5
|
Verfasst: Sa 26.01.08 02:15
Titel: Re: Und es geht doch!
Hallo nochmal Erich,
nach dem persönlichen jetzt nochmal zum sachlichen.
Aufgrund deiner neuen Idee habe ich mal das folgende Testformular erzeugt, was ich aus einem anderen Formular mit form7.showmodal; aufrufe.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| unit Unit7;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm7 = class(TForm) Edit1: TEdit; btOK: TButton; btAbbrechen: TButton; procedure FormShow(Sender: TObject); procedure Edit1Exit(Sender: TObject); private public end;
var Form7: TForm7;
implementation
{$R *.DFM}
procedure TForm7.FormShow(Sender: TObject); begin btOk.ModalResult:=mrOK; btAbbrechen.ModalResult:=mrCancel; end;
procedure TForm7.Edit1Exit(Sender: TObject); begin if ModalResult <> btAbbrechen.ModalResult then begin if Edit1.Text='' then begin showmessage('Fehler'); Edit1.SetFocus; end; end; end;
end. |
In meinem Delphi5 bleibt aber leider der gewünschte Effect aus.
Ich kann das Formular nicht mit Abbrechen beenden, wenn das Edit-Feld leer ist.
Mache ich etwas falsch?
Oder gibt es womöglich sogar unterschiede in verschiedenen Delphi-Versionen (Ich nutze Delphi5)?
|
|
|