[Erledigt] Boolean-Prüfung funktioniert nicht

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut

Re: Boolean-Prüfung funktioniert nicht

Beitragvon Mathias » 27. Apr 2018, 17:21 Re: Boolean-Prüfung funktioniert nicht

Könnte sein, das DoSave an 2 Orten deklariert ist.
Einmal in deiner Globale Deklaration, und das zweite mal sonst in irgendeiner Unit ?

Das würde man sofort merken, wen du die globale Deklaration mal ausklammerst.
Solche Doxxxx Deklarationen gibt es viele in er LCL.

Wäre es möglich mal den ganze Quell-Code hoch zu laden ?
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 27. Apr 2018, 18:19 Re: Boolean-Prüfung funktioniert nicht

Ja, ist aktuell kompiliert, vorher alle ppus gelöscht.

Habe aber jetzt etwas herausgefunden:

Da ich die DoSave in mehreren Forms definiert habe, habe ich diese nun in der besagten Form anders benannt: DoPosSave.

Diese wird bei Klick auf den Verwerfen-Button auf False gesetzt, ist dann aber an der Problemstelle wieder True.
Es scheint irgendwie mit der Sichtbarkeit von DoPosSave zu tun zu haben.
Wo muss ich diese richtigerweise definieren, wenn sie in der gesamten Unit - und nur dort - sichtbar sein soll?
Die Funktion BearbeiteAuftragsPosition soll auch von außerhalb aufgerufen werden können, weswegen sie vor
dem Implementation-Teil ist. Ist der Fehler eventuell hier zu suchen?
Zuletzt geändert von MacWomble am 27. Apr 2018, 18:44, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 520
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.60 (FPC 3.1.1 Rev 39389) | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon MacWomble » 27. Apr 2018, 18:40 Re: Boolean-Prüfung funktioniert nicht

Mathias hat geschrieben:Wäre es möglich mal den ganze Quell-Code hoch zu laden ?


Ich denke, das macht kein Sinn. Sind ca. 40 Datenbanktabellen und 38 Forms und einige Frames. Bis du da den Überblick hast ...

Aber mit meinem letzten Beitrag habe ich das Problem ja schon eingegrenzt. DoPosSave wird ansonsten nirgends verwendet.

Kann man denn von einer modal aufgerufenen Form einen Wert zurück geben, je nach dem, welcher Button geklickt wurde?

Code: Alles auswählen
 
// So geht es ja wohl nicht ;-) Aber irgendetwas in dieser Art?
If  F.ShowModal = True then
 
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 520
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.60 (FPC 3.1.1 Rev 39389) | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Mathias » 27. Apr 2018, 18:55 Re: Boolean-Prüfung funktioniert nicht

Wo muss ich diese richtigerweise definieren, wenn sie in der gesamten Unit - und nur dort - sichtbar sein soll?

Hier:
Code: Alles auswählen
implementation
 
uses
  dtm_artikel, dtm_auftrag, dtm_basis, frm_getartikel;
 
var
  DoSave: boolean;
 


Generell würde ich mir angewöhnen, keine globalen Variablen zu deklarieren.
In diesem Fall könntest du sie auch im privaten Teil von TfrmPosition deklarieren.


Der Aufruf wären dann hier so:
Code: Alles auswählen
// Hier findet der Spuk statt:
 
        if frmPosition.DoSave = True then
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 27. Apr 2018, 19:18 Re: Boolean-Prüfung funktioniert nicht

Das ergibt:
frm_position.pas(181,14) Error: identifier idents no member "DoPosSave"

Edit
Wenn ich sie im Private erzeuge, findet er sie wieder, aber ist immer wieder True :-(

Die komplette Unit hier eingefügt und dann fiel es mir wie Schuppen von den Augen:

Die Wurzel allen Übels ist gefunden - Vielen Dank für eure Hilfe.

Wenn ich in OnFormClose den Wert auf True setze, brauch ich mich wahrlich nicht zu wundern :-(

Code: Alles auswählen
 
 
procedure TfrmPosition.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  DoPosSave := True;
  Close;
end;
 
 
end.
Zuletzt geändert von MacWomble am 27. Apr 2018, 20:13, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 520
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.60 (FPC 3.1.1 Rev 39389) | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

Beitragvon Mathias » 27. Apr 2018, 19:46 Re: Boolean-Prüfung funktioniert nicht

Wenn ich in OnFormClose den Wert auf True setze, brauch ich mich wahrlich nicht zu wundern :-(

Dies gibt es ab und zu, das man ein Brett vor den Augen hat. :wink:

Aber Hauptsache, du hast es zu laufen gebracht. :wink:
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot
Mathias
 
Beiträge: 4107
Registriert: 2. Jan 2014, 17:21
Wohnort: Schweiz
OS, Lazarus, FPC: Linux (die neusten Trunc) | 
CPU-Target: 64Bit
Nach oben

Beitragvon MacWomble » 27. Apr 2018, 20:12 Re: Boolean-Prüfung funktioniert nicht

Dafür ist die Variable jetzt auch nicht mehr global, was ja auch richtig ist. Es funktioniert einwandfrei - Nochmals Danke an Alle.

Der Aufruf für die Form sieht jetzt so aus:
Code: Alles auswählen
 
        F.DoSave:=False;
        F.ShowModal;
        if F.DoSave then 
 


und ein paar Änderungen hier:
Code: Alles auswählen
 
procedure TfrmPosition.btnSpeichernClick(Sender: TObject);
begin
  DoSave := True;
  Close;
end;
 
procedure TfrmPosition.btnVerwerfenClick(Sender: TObject);
begin
  DoSave := False;
  Close;
end;     
 
 
procedure TfrmPosition.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
  If not DoSave then // Falls das Fenster einfach geschlossen wird oder Verwerfen angeklickt wurde
  if MessageDlg('Sollen wirklich alle Änderungen verworfen werden?', mtWarning, [mbYes, mbNo], 0) = mrYes then
    DoSave := False
  else
    DoSave := True;
  Close;
end;       
 
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
MacWomble
 
Beiträge: 520
Registriert: 17. Apr 2008, 00:59
Wohnort: Freiburg
OS, Lazarus, FPC: Mint 18.3 Cinnamon / CodeTyphon Generation V Plan 6.60 (FPC 3.1.1 Rev 39389) | 
CPU-Target: Intel i7 64/32 Bit
Nach oben

• Themenende •
Vorherige

Zurück zu Freepascal



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

porpoises-institution
accuracy-worried