Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi procedure zur plausibilitätsprüfung (https://www.delphipraxis.net/52849-procedure-zur-plausibilitaetspruefung.html)

polondo 5. Sep 2005 13:21


procedure zur plausibilitätsprüfung
 
hi leute ich hab da mal was geschrieben um ne plausibilitätsprüfung für alle editfelder auf meinem form zu bekommen. dabei soll diese procedure in einem onclick-ereignis aufgerufen werden und sämtliche edit-felder überprüfen. ist ein edit feld leer soll es eine messagebox ausgeben und auf das feld fokussieren... allerdings bekomm ich einen fehler wenn ich versuche dieses procedure folgendermaßen auszuführen: plausi (sender:tedit) error:invalid class typecast ... kann mir da einer weiterhelfen?

Delphi-Quellcode:
procedure plausi (sender:tedit);
begin
with (sender as tedit) do
  begin
  if (sender as tedit).text = '' then
    begin
    MessageDlg ('Please fill all required fields!',mtwarning,[mbok],0);
    (sender as tedit).SetFocus;
    end;
  end;
end;
[edit=Luckie]Delphi-Tags gesetzt. Mfg, Luckie[/edit]

Luckie 5. Sep 2005 13:24

Re: plausi heeeeelp :/
 
Bitte ändere den Titel des Threads. Der jetztige ist nicht sehr aussagekräftig. Und setzte bitte auch gleich die Delphi-Tags. Danke.

Luckie 5. Sep 2005 13:27

Re: procedure zur plausibilitätsprüfung
 
Wäre nett, wenn du uns noch den Fehler nennen würdest. :roll:

Thanatos81 5. Sep 2005 13:28

Re: plausi heeeeelp :/
 
Hallo und herzlich Willkommen palondo!

Dein Problem ist, dass du als Parameter bereits ein TEdit erhältst. Du kannst keinen TypeCast als TEdit auf ein TEdit machen, da es ja bereits ein TEdit ist.

@Luckie
Hat er doch:
Zitat:

Zitat von polondo
allerdings bekomm ich einen fehler wenn ich versuche dieses procedure folgendermaßen auszuführen: plausi (sender:tedit) error:invalid class typecast

//Edit:
Rechtschreibfehler :roll:

leddl 5. Sep 2005 13:29

Re: procedure zur plausibilitätsprüfung
 
Die Delphi-Tags fehlen immer noch ([delphi]..[/ delphi])

Ich denke mal, daß du auf jeden Fall mal TObject anstatt TEdit im Prozedurkopf nehmen mußt. Und laß dann beim Aufruf das :TEdit weg, das brauchst du nicht.

//Edit:
OK, die Tags haben sich erübrigt :roll:

NicoDE 5. Sep 2005 13:32

Re: procedure zur plausibilitätsprüfung
 
Der Code weist drei Dinge auf die ich merkwürdig finde:
- Sender ist bereits ein TEdit, trotzdem wird der as-Operator verwendet...
- es wird ein with-Block verwendet, aber trotzdem immer ge-castet...
- ich vermute, dass es sich um eine Ereignisroutine handeln soll, allerdings ist es im Moment eine globale Funktion...

leddl 5. Sep 2005 13:37

Re: procedure zur plausibilitätsprüfung
 
Zitat:

Zitat von NicoDE
- ich vermute, dass es sich um eine Ereignisroutine handeln soll, allerdings ist es im Moment eine globale Funktion...

Nein, er möchte diese Funktion in einem onClick-Ereignis aufrufen (siehe sein erster Post). Das passt schon. Nur muß er eben ein TObject übergeben, und kein TEdit. Dann passt das auch (bis auf die 2 anderen Punkte, die du genannt hast ;))

polondo 5. Sep 2005 13:40

Re: procedure zur plausibilitätsprüfung
 
erstmal danke für die schnellen antworten!

ich hab nun das ganze so geändert:

Delphi-Quellcode:
procedure plausi(sender:tobject);
begin
with sender as tedit do
  begin
  if (sender as tedit).text = '' then
    begin
    MessageDlg ('Please fill all required fields!',mtwarning,[mbok],0);
    (sender as tedit).SetFocus;
    end;
  end;
end;
aufgerufen wird das ganze mit plausi(sender); in einem onclick-ereignis eines buttons.
jedoch bekomm ich wieder diesen fehler: invalid class typecast

mein procedure kopf sieht folgendermaßen aus:
Delphi-Quellcode:
var
  ProductDefinitionForm: TProductDefinitionForm;
  procedure plausi(sender:tobject); <<<<<< hier hab ich den aufgeführt

NicoDE 5. Sep 2005 13:41

Re: procedure zur plausibilitätsprüfung
 
Zitat:

Zitat von leddl
Nein, er möchte diese Funktion in einem onClick-Ereignis aufrufen

Delphi-Quellcode:
property OnClick: TNotifyEvent;
Code:
type TNotifyEvent = procedure (Sender: TObject) [color=red]of object[/color];

leddl 5. Sep 2005 13:45

Re: procedure zur plausibilitätsprüfung
 
Laß mal die Typecasts innerhalb des WITH-Blocks weg. Vielleicht geht es dann.

tigerman33 5. Sep 2005 14:21

Re: procedure zur plausibilitätsprüfung
 
Daran kanns doch eigentlich nicht liegen. Ich glaub kaum, dass ein TEDit auf ein TEdit zu casten ein Invalid Typecast hervorbringt. Ich glaub eher, dass Sender kein TEdit ist in dem Fall. Probier doch mal:

Delphi-Quellcode:
procedure plausi (sender:tedit);
begin
if Sender is TEdit then
with (sender as tedit) do
  begin
  if (sender as tedit).text = '' then
    begin
    MessageDlg ('Please fill all required fields!',mtwarning,[mbok],0);
    (sender as tedit).SetFocus;
    end;
  end;
end;
Außerdem muss Plausi eine Methode sein. Also zum Beispiel procedure TForm1.Plausi

Thanatos81 5. Sep 2005 14:36

Re: procedure zur plausibilitätsprüfung
 
//Edit: dieser Post kann eigentlich ignoriert werden, (vermutete) Lösung steht einen Post weiter unten.

Das TForm1 ist nur nötig, wenn er auf Komponenten oder globale Varaiblen des Forms zugreifen möchte. Ansonsten braucht man es nicht. Ist dann sogar von Vorteil, da man es einfach in andere Units/Projekte übernehmen kann, ohne die procedure anzupassen.

Am doppelten Typecast liegts aber tatsächlich nicht, hab mal eben ein wenig rumprobiert:
Delphi-Quellcode:
procedure showText(Sender: TObject);
begin
  with (Sender as TEdit) do
    begin
      showMessage((Sender as TEdit).Text);
    end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  showText(Sender);
end;
Delphi-Quellcode:
procedure showText(Sender: TEdit);
begin
  with (Sender as TEdit) do
    begin
      showMessage((Sender as TEdit).Text);
    end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  showText(TEdit(Sender));
end;
Delphi-Quellcode:
procedure showText(Sender: TEdit);
begin
  with (Sender as TEdit) do
    begin
      showMessage((Sender as TEdit).Text);
    end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  showText(Sender as TEdit);
end;
Alle drei Varianten funktionieren problemlos...

@polondo: Bist du hundertprozentig sicher, das wirklich ein TEdit übergeben wird?
@tigerman33: Wenn du schon ein TEdit übergibts, warum machst du dann überhaupt noch innerhalb der prozedur Typecasting?

Persönlich finde ich übrigens diese Variante am elegantesten:
Delphi-Quellcode:
procedure showText(Sender: TEdit);
begin
  showMessage(Sender.Text);
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  showText(TEdit(Sender));
end;

Thanatos81 5. Sep 2005 14:39

Re: procedure zur plausibilitätsprüfung
 
Zitat:

Zitat von polondo
aufgerufen wird das ganze mit plausi(sender); in einem onclick-ereignis eines buttons.
jedoch bekomm ich wieder diesen fehler: invalid class typecast

Da ist der Fehler: Wenn du im OnClick eines Buttons Sender benutzt ist dein Sender natürlich vom Typ TButton. Der Sender ist immer das Objekt, das die Aktion ausgelöst hat.

leddl 5. Sep 2005 14:43

Re: procedure zur plausibilitätsprüfung
 
:wall: eines Buttons. Das hab ich irgendwie überlesen. Joa, das sollte es wohl sein :lol:

tigerman33 5. Sep 2005 16:10

Re: procedure zur plausibilitätsprüfung
 
Zitat:

Wenn du schon ein TEdit übergibts, warum machst du dann überhaupt noch innerhalb der prozedur Typecasting?
:shock:

Das wär allerdings ziemlich sinnlos. Ich wollte aber eigentlich schreiben:
Sender: TObject

Ganz normales TNotifyEvent.

Immer schlecht wenn man schneller denken als schreiben kann...


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:02 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