[gelöst] Komisches Verhalten vom Programm und keine Erklärung

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Benutzeravatar
juelin
Beiträge: 321
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

[gelöst] Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

Hallo,
bin am Verzweifeln.
Habe Lazarus 4.2 und FPC 3.2.2 das ganze unter Windows 11.
Habe ein Programm geschrieben wo Daten in eine Datenbank erfasst werden (siehe Bild1).
In der Procedure TForm1.Edit3KeyUp passiert der Fehler.
Ich habe einen Haltepunkt auf (siehe Quellcode "Haltepunkt") gesetzt.
Wenn das Programm da stoppt und ich anschliessend F8 drücke,
so steht das Programm (siehe Quellcode "nach Funktionstaste F8 steht er hier") hier.
Außerdem durchläuft das Programm nochmal die Routine "TForm1.Button1Click"
(Das ist der Button "Anlegen Song") ohne das ich den Button gedrückt hätte.
Kann mir das Jemand erklären?
Danke und Gruß
Jürgen

Code: Alles auswählen

procedure TForm1.Edit3KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
  var h1: string;
  var h2: string;
  var h3: string;
  var h4: integer;
begin
  if mlauf = 3 then
  begin
    Shift:=Shift;
    if ((istell = ilanmax) and (ord(itaste) > 0) and (iautocr = 1)) then
    begin
      Key:=ord(chr(13));
    end;
    if ord(Key) = 13 then
    begin
      istell:=0;
      Label2.Caption:='';
      Edit3.Enabled:=False;
      Edit3.ReadOnly:=True;
      Edit3.Color:=clSilver;
      ialpha:=Edit3.Text;
      h1:=Blankweg(3,ialpha);
      if h1 <> '' then
      begin
        Titel:=h1;
        h4:=0;
        Form1.ZQuery1.SQL.Text:='SELECT * FROM oldies WHERE Jahrzent=:jar AND Interpret=:inter AND Titel=:tit ORDER BY Jahrzent, Interpret, Titel';
        Form1.ZQuery1.ParamByName('jar').asInteger:=Jahrgang;
        Form1.ZQuery1.ParamByName('inter').asString:=Interpret;
        Form1.ZQuery1.ParamByName('tit').asString:=Titel;
        Form1.ZQuery1.Open;
        while not Form1.ZQuery1.EOF do
        begin
          h4:=h4+1;
          Form1.ZQuery1.Next;
        end;
        Form1.ZQuery1.Close;
        if h4 = 0 then
        begin
          h1:=IntToStr(Jahrgang);
          h2:=Copy(h1,1,1);
          h3:='D:\Mediathek\Oldies\'+h2+'0s\'+Interpret+' - '+Titel+'.mp3';
          if FileExists(h3) then
          begin
            mlauf:=4;
            ComboBox2.Color:=clWhite;
            ComboBox2.Enabled:=True;
            ComboBox2.ReadOnly:=False;
            Form1.ActiveControl:=ComboBox2;
          end else begin
            Label2.Caption:='Musikfile '+h3+' nicht vorhanden, Abbruch';
            mlauf:=0;
            mtasts:=1;
            mart:=0;
            Closestat:=0;                                                                                          // Haltepunkt
          end;
        end else begin
          Label2.Caption:='Song schon vorhanden, Abbruch';
          mlauf:=0;
          mtasts:=1;
          mart:=0;
          Closestat:=0;
        end;
      end else begin
        Label2.Caption:='Titel muss eingegeben werden';
        Edit3.Enabled:=True;
        Edit3.ReadOnly:=False;
        Edit3.Color:=clWhite;
        Edit3.Text:='';
        ialpha:='';
        inummer:=0;
        inumkom:=0;
        ikomma:=0;
        izeich:=3;
        istell:=0;
        iautocr:=1;
        iart:=1;
        ifunc:=5;
        ilanmax:=50;
        ilanmin:=1;
        Form1.ActiveControl:=Edit3;
        Edit3.AutoSelect:=True;                                                         // nach Funktionstaste F8 steht er hier
      end;
    end;
  end;
end;
PS: Was ich inzwischen festgestellt habe: das Element mit TabOrder=0 wird mehrfach ausgeführt.
Dateianhänge
Bild1.jpg
(338.25 KiB) Noch nie heruntergeladen
Zuletzt geändert von juelin am Mi 8. Okt 2025, 14:09, insgesamt 1-mal geändert.

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 413
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von Jorg3000 »

Hallo Jürgen!
Da in den letzten Stunden noch niemand geantwortet hat, stochere ich mal etwas im Nebel ...

Ist auf dem Formular ein Button mit .Default=true, wird bei Enter dessen Click aufgerufen, egal welches Feld den Fokus hat.
Du setzt in Edit3KeyUp selbst Key := 13; bzw. lässt Enter durchreichen. Danach danach wird es vom Default-Button weiterbehandelt, d.h. Button1Click läuft wie von Geisterhand.
Zusätzlich lösen deine Fokuswechsel (ActiveControl := …, Enabled := false/true) weitere Events aus: dadurch wirkt das TabOrder-0-Steuerlement wie mehrfach aktiv.

Code: Alles auswählen

if mlauf = 3 then
  begin
  if Key = VK_RETURN then Key := 0;   // nicht weiterverarbeiten
Nicht Key := 13 in OnKeyUp setzen, denn das simuliert Enter für die Form.

Benutzeravatar
juelin
Beiträge: 321
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

Hallo Jorg3000,
das mit dem Key habe ich schon 1000mal gemacht und hat immer funktioniert.
Ich kann nicht glauben dass das der Fehler ist.
Gruß
Jürgen

Benutzeravatar
juelin
Beiträge: 321
Registriert: Sa 24. Jul 2021, 18:03
OS, Lazarus, FPC: Linux Ubuntu 22. Windows 10 Delphi 11.3 (L 0.9.xy FPC 2.2.z)
CPU-Target: 64Bit
Wohnort: Mannheim

Re: [gelöst] Komisches Verhalten vom Programm und keine Erklärung

Beitrag von juelin »

Hallo Jorg3000,
mein Fehler.
Du hast Recht.
Mit Key:=Ord(Chr(0)); tritt der Fehler nicht mehr auf.
Danke.
Gruß
Jürgen

Mathias
Beiträge: 7056
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: [gelöst] Komisches Verhalten vom Programm und keine Erklärung

Beitrag von Mathias »

juelin hat geschrieben: Mi 8. Okt 2025, 14:12 Hallo Jorg3000,
mein Fehler.
Du hast Recht.
Mit Key:=Ord(Chr(0)); tritt der Fehler nicht mehr auf.
Danke.
Gruß
Jürgen
Wieso dieser Doppel Chast ?
Dies sollte auch gehen:

Code: Alles auswählen

Key := 0;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten