Autor Beitrag
gd0123456
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: So 08.04.12 13:57 
Hi, hab folgendes Problem.

Hab ein Listview mit checkboxen. Im Ereignis ListView1MouseUp frage ich ab ob die checkbox angeklickt wurde.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm3.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  Item: TListItem;
  HitTest: THitTests;
begin
  Item := ListView1.GetItemAt(x, y);
  HitTest := ListView1.GetHitTestInfoAt(x, y);
  if (Item <> niland (HitTest = [htOnStateIcon]) then
  begin
    if (item.Checked = true) then
    begin
       adocommand1.CommandText := 'insert into rechnung (kundenid,bezeichnung,netto,datum,recid) values ('+edit1.Text+',"'+item.SubItems[0]+'","'+item.SubItems[1]+'","2009-20-22",'+edit2.Text+')';
       adocommand1.Execute;
    end;
   end;
end;


Funktioniert auch soweit, jedoch habe ich das Problem dass es mir zweimal den Datensatz in die Datenbank schreibt. Setze ich nachdem execute ein showmessage dann schreibt er nur einmal. also genau so wie ich es brauche.

Hat jemand eine Idee bzw. kann mir helfen warum das passiert?

Danke

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
rd3
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 08.04.12 16:37 
=> OnItemChecked
gd0123456 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mo 09.04.12 13:50 
Danke für die Antwort, hab ich auch schon ausprobiert, jedoch hat die funktion den Nachteil, dass ich die Spalten nicht auslesen kann. Also kann zwar überprüfen ob die Checkbox aktiviert wurde jedoch muss die ganze Spalte markiert sein, dass ich die Werte bekomme.
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Di 10.04.12 18:08 
Gucke mal, wer denn der "Sender" beim OnMouseUp ist. Wenn das zweimal aufgerufen wird, dann vielleicht mit verschiedenen Sendern. Dann würde ja if Sender=??? then zu Beginn ausreichen, um die Funktion nur einmal auszuführen

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
gd0123456 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 33



BeitragVerfasst: Mi 11.04.12 03:52 
Ok so hab die Lösung gefunden, naja man muss halt ein wenig das Hirn einschalten wenn man programmiert. Man sollte es auch in der richtigen Funktion schreiben OnListviewMouseDown und nicht onListviewMouseUp. OnListviewMouseUp wird zweimal aufgerufen einmal beim Draufklicken und einmal beim Loslassen. Die Lösung kann so nah und doch so fern sein.

Trotzdem danke für die Unterstützung.