Liebe Community,
ich habe in meiner Anwedung eine Schaltfläche (mit dem Symbol des Hilfepfeil crHelp als Bild).
Klickt der Anwender diese Schaltflähe und anschließend auf ein Element, wird in der Statuszeile eine Hilfe zu dem entsprechenden Element angezeigt.
Eigentlich nichts kompliziertes.
Dazu habe ich in meinem Hauptformular eine Funktion
ZeigeHilfe, die überprüft, ob der Hilfemodus aktiv ist oder nicht (sobald man den Button
Hilfe klickt, wird der Hilfemodus auf True gesetzt). Ist der Hilfemodus aktiv, wird ein übergebener Text als Hilfe in der Statuszeile angezeigt, der Hilfemodus auf False gesetzt (und der Cursor auf crDefault) und die Funktion liefert ein TRUE zurück (also dass eine Hilfe anzuzeigen war).
Ist der Hilfemodus nicht aktiv, wird nur ein False zurückgeliefert (bedeuted dass nichts anzuzeigen war).
Der Code dazu schaut so aus:
Delphi-Quellcode:
function TfrmHauptFenster.ZeigeHilfe(aHelpText: string): Boolean;
begin
if HilfeModus then
begin
ZeigeHinweisInStatusbar(aHelpText);
HilfeModus := False;
Result := True
end
else
begin
Result := False;
end;
end;
Bei einer normalen Schaltfläche (z.B. Button "Neuer Datensatz") führe ich folgendes aus:
Delphi-Quellcode:
procedure TfrmHauptFenster.btnToolbarNewClick(Sender: TObject);
begin
if not ZeigeHilfe(HilfeTextFuerNeuenDatensatz) then
begin
// Es soll keine Hilfe angezeigt werden -> hier kommen Aktionen für den neuen Datensatz (habe ich hier im Forum weg gelassen)
end;
end;
Das ganze funktioniert also ganz gut.
Bei Buttons habe ich das Event "OnClick" verwendet, um die Hilfe anzuzeigen.
Bei Eingabelfern (TEdit und TDBEdit) habe ich auch das Event "OnClick".
Eine Bitte an dieser Stelle:
Bitte bewertet hier nicht meinen bisherigen Code. Manch einer könnte sagen, dass man das letzte begin...end bei "ZeigeHilfe" weglassen kann, aber das ist nicht mein Problem. Es soll hier keine Diskussion über meinen Code entstehen, sondern auf mein Problem eingegangen werden.
Mein Problem folgt hier....
Jetzt habe ich das Problem mit folgenden Komponenten:
- TComboBox
- TDBComboBox
- TKADaoDBGrid
- TCheckBox
- TDBCheckBox
Bei
Checkboxen wird bei OnClick und bei OnMouseDown immer die CheckBox angehakt.
Einfach nur die Checkbox im Hilfemodus wieder abhaken (also Checkbox.checked := not Checkbox.checked) ist bescheuert, da manche Checkboxen Datensatzfilter auslösen und man dann beim Klicken der Checkbox mit dem Hilfecursor einen ganz anderen Kunden (dann ist der Filter aktiv) angezeigt bekommt und dann wieder plötzlich alle Kunden (aber auch nicht den aktuellen).
Gibt es einen Weg bei einer Checkbox beim OnClick die Checkbox NICHT anzuhaken?
Bei
ComboBoxen habe ich das Problem, dass ich gerne das aufklappen der Liste verhinder würde.
Bei folgendem Quelltext:
Delphi-Quellcode:
procedure cboKundenArtMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if (HilfeModus) then
ShowMessage('Hilfe zu KundenArt') else
cboKundenArt.DropDown;
end;
wird die Liste NICHT aufgeklappt und nur der Hinweis angezeigt (in einem Hinweisfenster).
Ersetze ich das "ShowMessage" durch "ZeigeHilfe" wird zwar der Hinweistext in der Statuszeile angezeigt, aber die Listbox klappt auf.
Wie kann ich das Aufklappen der ComboBoxen beim Anklicken verhindern?
Bei dem
TKADaoDBGrid habe ich das Problem, dass auch im Hilfemodus der aktuelle Datensatz gewechselt wird (die TKADaoDBGrid wird zur auswahl eines Kunden und damit zur Datensatznavigation verwendet). Im Hilfemodus soll aber kein Datensatz gewechselt werden.
Ich verwende hier den Event "OnMouseDown" , da der Event "OnCellClick" nur bei Datenzeilen funktioniert. Wenn das Grid selbst aber nur wenige Datensätze enthält und der User klickt in den weißen Bereich unterhalb des letzten Datensatzes, passiert nichts (kein Event "OnCellClick").
Wie kann ich hier die Datensatznavigation unterbinden?
Vielen Dank für Eure Hilfe
Gruß
OLLI