Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form Automatsch öffnen, wenn ein User es möchte! (https://www.delphipraxis.net/188-form-automatsch-oeffnen-wenn-ein-user-es-moechte.html)

jbg 18. Jun 2002 10:37

Aber nur, wenn du vorher die Variable auf nil setzt, wenn sie nicht global oder in einer Klasse deklariert ist. Und selbst Borland sagt, dass das nicht gerade der schönste und übersichtlichste Programmierstil ist.

thomasdrewermann 18. Jun 2002 12:02

Teste mal:
Code:
procedure TKundendaten.FormCreate(Sender: TObject);
begin
  load_inifile;
  if ExtraForm.CheckBox1.Checked=true Then GeburtsdatumClick(sender);
end;

jbg 18. Jun 2002 12:23

Der Fehler liegt im Vergleich von Now mit dem zusammengesetzten Datum. Wenn er sein Programm genau um 0:00 Uhr startet, dann funktioniert es. Anstatt Now muss Date verwendet werden. Es sollten auch alle Datensätze durchlaufen werden, und nicht nur der aktuell ausgewählte.

Lösung:
Code:
procedure TKundendaten.GeburtsdatumClick(Sender: TObject);
var
  i, r: Integer;
  s: string;
begin
  r := DM.ADOSHaupt.RecNo;
  for i := 1 to DM.ADOSHaupt.RecordCount do
  begin
    DM.ADOSHaupt.RecNo := i;
    s := Copy(DM.ADOSHaupt.FieldByName('Geburtsdatum').AsString, 1, 6);
    if (StrToDate(s + Copy(DateToStr(Date + 7), 7, 4)) <= Date + 7) and
       (StrToDate(s + Copy(DateToStr(Date), 7, 4)) >= Date) then
    begin
      DM.ADOSHaupt.Filtered := True;
      ExtraForm.Show;
    end;
  end;
  DM.ADOSHaupt.RecNo := r;
end;

m-werk 19. Jun 2002 21:34

Hi, ich habe jetzt den Code vom Button so wie oben beschrieben eingebaut. Der Button funktioniert zwar, aber die ExtraForm öffnet sich noch immer nicht automatisch beim start.

Da wir ja gerade dabei sind, auch den Code vom Geburtstag zu ändern, zeige ich jetzt euch noch den Code, der in dem Datenmodul 'DM' steht, wo ich dann filtere:

Code:
procedure TDM.ADOSHauptFilterRecord(DataSet: TDataSet;                        
  var Accept: Boolean);
begin
if (StrToDate(Copy(ADOSHaupt.FieldByName('Geburtsdatum').AsString,0,6)+Copy(DateToStr(now),7,4))<=now+7)
and (StrToDate(Copy(ADOSHaupt.FieldByName('Geburtsdatum').AsString,0,6)+Copy(DateToStr(now),7,4))>now)
then Accept :=true
else Accept :=false;
end;
Was kann ich da nur noch tun?

jbg 19. Jun 2002 23:44

Nimm mal anstatt Now die Funktion Date. Und bessere auch gleich das Copy(..., 0, 6) in Copy(..., 1, 6) aus

m-werk 20. Jun 2002 12:29

Hi, werd ich heute abend mal probieren.

Was ist jetzt aber mit dem Geburtsdatum.Click oder GeburtsdatumClick(sender)

Ich werd mal probieren, diese procedure in onActivate hineinzustellen.
Ich habe aber fast die befürchtung, dass da dann, wenn die checkbox angewählt ist, wieder eine Meldung von Onhide und so kommen wird.

Ich habe es ja vorher auch bei onActivate gehabt. Da hat sich die Form automatisch beim start dann geöffnet. nur habe ich eine Meldung gehabt. So in der Art, dass die form im onhide nicht geändert werden kann.

Kann ich sonst anstelle von onShow und onActivte noch was anderes probieren?

jbg 20. Jun 2002 13:22

In OnActivate würde ich das in dem Fall nicht stecken: Lies mal dieses dazu. Aber es gibt noch OnShow.

m-werk 20. Jun 2002 15:32

Danke für die INFO. Genau solche Beschreibungen können jemanden weiterhelfen, der sich nicht richtig im Code-tschungel auskennt.

Aber trotzdem: das mit dem onShow hab ich ja immer gemacht. Da ist ja das problem. Ich bekomme die Form nicht automatisch beim Start auf. (siehe postings weiter oben).

jbg 20. Jun 2002 16:31

Ändere mal den Code in GeburtsdatumClick so um:
Code:
procedure TKundendaten.GeburtsdatumClick(Sender: TObject);
var
  i, r: Integer;
  s: string;
begin
  ExtraForm.Show;
  Exit;

  r := DM.ADOSHaupt.RecNo;
  for i := 1 to DM.ADOSHaupt.RecordCount do
  begin
    DM.ADOSHaupt.RecNo := i;
    s := Copy(DM.ADOSHaupt.FieldByName('Geburtsdatum').AsString, 1, 6);
    if (StrToDate(s + Copy(DateToStr(Date + 7), 7, 4)) <= Date + 7) and
       (StrToDate(s + Copy(DateToStr(Date), 7, 4)) >= Date) then
    begin
      DM.ADOSHaupt.Filtered := True;
      ExtraForm.Show;
    end;
  end;
  DM.ADOSHaupt.RecNo := r;
end;
Die Warnungen die der Compiler ausspuckt kannst du ignorieren.
Starte dein Programm. Wenn jetzt die ExtraForm angezeigt wird, dann stimmt etwas mit der if-Anweisung nicht, oder du hast keine Datensätze mit den passenden Geburtsdaten.

m-werk 21. Jun 2002 18:16

So, nun habe ich den Code umfunktioniert, so wie oben beschrieben.

Weiters habe ich im DataModul (DM) den Code beim Filtern auch umgeschrieben.

Code:
procedure TDM.ADOSHauptFilterRecord(DataSet: TDataSet; var Accept: Boolean);
begin
  if (StrToDate(Copy(ADOSHaupt.FieldByName('Geburtsdatum').AsString,1,6)+Copy(DateToStr(Date),7,4))<=Date+7)
  and (StrToDate(Copy(ADOSHaupt.FieldByName('Geburtsdatum').AsString,1,6)+Copy(DateToStr(Date),7,4))>Date)
  then Accept := true
  else Accept := false;
end;
Die ExtraForm öffnet sich aber noch immer nicht

Und wenn ich jetzt auf den Geburtstagsbutton klicke, sehe ich jetzt auf einmal ALLE Leute, egal ob diese in der Woche Geburtstag haben oder nicht. Das hängt jetzt mit dem ExtraForm.Show; Exit; zusammen. Wenn ich das weglasse, funktioniert es. Wenn ich es dazugebe, sehe ich alle Leute.

Warum lässt sich die ExtraForm nicht öffnen.
Langsam aber sicher verzweifle ich dabei noch!

Wie sieht es denn eigentlich aus, wenn man das mit der ExtraForm über die Registry löst?

PS: Ich habe gesehen, dass bei der ExtraForm 'Visible' auf false war. Dann habe ich es auf True gesetzt. Mit dieser Art habe ich dann kurz die ExtraForm gesehen aber dies hat auch nichts geholfen. So habe ich Visible wieder auf false gesetzt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:47 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz