AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit cxScheduler

Ein Thema von bwolf · begonnen am 22. Aug 2012 · letzter Beitrag vom 23. Aug 2012
Antwort Antwort
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#1

Problem mit cxScheduler

  Alt 22. Aug 2012, 13:33
Hi,

ich habe ein kleines Problem mit dem cxScheduler.
Ich versuche mal anhand von ein paar Codeschnipseln zu erklären was ich vorhabe und woran es hängt.

Im Ereignis OnEventModified ändere ich ein Event "von Hand" ab. Anschließend wird über PostMessage eine Funktion aufgerufen, um eine "ControlBox" zu aktualiieren. Der Umweg über das PostMessage ist nötig da der Scheduler (oder meine Datebankkomponenten) nicht direkt aktualisiert werden.
Der Code sieht so aus:


Code:
procedure TfrmMain.ssKalenderEventModified(Sender: TObject;
  AEvent: TcxSchedulerEvent; var AHandled: Boolean);
begin
  FEventLastModified := TcxSchedulerControlEvent(AEvent);

   ...

  // Verzögertes updataen der Controlbox
  PostMessage(Handle, WM_AFTERMODIFIED, 0,0);
  AHandled := True;
end;
In der Variablen FEventLastModified wird die Referenz auf das zuletzt geänderte Event gespeichert.
Folgende Funktion wird dann vom PostMessage aufgerufen:

Code:
procedure TfrmMain.doUpdate(var msg : TMessage);
begin
  UpdateControlBox(FEventLastModified);
end;
Und UpdateControlBox sieht dann etwa so aus:

Code:
procedure TfrmMain.UpdateControlBox(AEvent : TcxSchedulerEvent = nil);
begin
  mdWarnungen.Close;
  mdWarnungen.Open;
  tsWarnung.ImageIndex := -1;

  lblBezeichnung.Caption := VarToStr(AEvent.GetCustomFieldValueByName('Bezeichnung'));
  ...

end;
Nun habe ich folgendes Problem:
Wenn ich diesen Code debugge und nach dem Aufruf von UpdateControlBox FEventLastModified.ClassName prüfe, passiert folgendes:
Im Beginn von UpdateControlBox ist FEventLastModified.ClassName = 'TcxSchedulerEvent', was auch korrekt ist.
Soblad ich aber auf die Nächste Zeile "mdWarnungen.Close;" ausführe, ist FEventLastModified.ClassName = 'TcxEditStyle', und daraufhin kriege ich beim Zugriff auf AEvent.GetCustomFieldValueByName natürlich eine Exception.


Wenn ich alle zugriffe auf mdWarnungen entferne, funnktionert alles bestens.
Ich kann mir allerdings überhaupt keinen Reim drauf machen was da schief läuft, mdWarnungen hat rein garnichts mit dem Scheduler zu tun...
Jemand einen Rat für mich?

Vielen Dank schonmal!
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Problem mit cxScheduler

  Alt 22. Aug 2012, 17:45
Das Problem war wohl das AEvent aus ssKalenderEventModified nacg Ablauf der Funktion nicht mehr gelebt hat und der Zeiger wohl sonstwohin gedeutet hat.

Lösung für jett ist, eine Kopie von AEvent anzufertigen und diese an UpdateControlBox zu übergeben.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: Problem mit cxScheduler

  Alt 22. Aug 2012, 23:10
Kopiere lieber die Informationen, die im UpdateControlBox angezeigt werden müssen. Du kannst Dir nicht sicher sein, das das Anlegen einer Kopie des Events keine Seiteneffekte verursacht.
Weiterhin glaube ich, das es einfacher ist, deine Daten direkt im Event zu aktualisieren und der Ursache auf den Grund zu gehen, weshalb das nicht ohne Weiteres funktioniert. Fehlt vielleicht nur ein 'Invalidate'?
  Mit Zitat antworten Zitat
bwolf

Registriert seit: 17. Jan 2006
368 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Problem mit cxScheduler

  Alt 23. Aug 2012, 08:33
Hi Furtbichler,

inwiefern könnte das problematisch werden? Ich hätte jetzt gedacht da es egal ist, ob ich die Daten "von Hand" zuweise (FEventLastModified.ID = Aevent.ID) oder das eben über Assign mache.
Natürlich würde ich "UpdateControlBox" am liebsten direkt aus dem EventModified-Event aufrufen, aber dummerweise sind die "CustomFields" des Events zu diesem Zeitpunkt noch nicht geupdated. DevExpress kann den Fehler nicht nachvollziehen und meint es liegt wohl an meinen DB-Componenten.
Ich habe schon einiges Probieret um das hinzubekommen aber leider will es nicht, wieso jetzt leider erstmal eine Notlösung herhalten muss.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz