[Erledigt] Boolean-Prüfung funktioniert nicht
-
- Beiträge: 6207
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
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 ?
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 grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
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?
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 Fr 27. Apr 2018, 19:44, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
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.
-
- Beiträge: 6207
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
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 grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
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
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 Fr 27. Apr 2018, 21:13, insgesamt 1-mal geändert.
Alle sagten, dass es unmöglich sei - bis einer kam und es einfach gemacht hat.
-
- Beiträge: 6207
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
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.
Aber Hauptsache, du hast es zu laufen gebracht.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Lazarusforum e. V.
- Beiträge: 999
- Registriert: Do 17. Apr 2008, 01:59
- OS, Lazarus, FPC: Mint 21.1 Cinnamon / FPC 3.2.2/Lazarus 2.2.4
- CPU-Target: Intel i7-10750 64Bit
- Wohnort: Freiburg
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:
und ein paar Änderungen hier:
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.