[Delphi] Bepaalde dagen vetjes zetten in TMonthCal

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
In m'n Delphi Applicatie heb ik een TMonthCalendar control zitten.
Als een gebruiker nu op een bepaalde dag dubbelklikt, dan moet die dag bold gezet worden.

Als een gebruiker dus dubbelklikt op een datum, dan steek ik die datum in een Array en die array gebruik ik dan ik de OnGetMonthInfo event handler om de dagen vet te zetten.
Dat op zich is het probleem niet. Ik krijg de gewenste dagen wel vetjes, maar ik krijg ze niet vet gedrukt wanneer ik het wil.
Ik moet namelijk eerst eens van maand veranderen en als ik dan terugkeer naar de maand met de gekozen dagen, dan pas worden ze in het vet gezet.

Nu wil ik natuurlijk dat de dagen vet worden van zodra ze gekozen zijn. Ik heb hiervoor al op groups.google.com gekeken en daar zijn er verschillende mensen met hetzelfde probleem. Dat probleem zou m.i. dan kunnen opgelost worden door een message te senden naar de CalendarControl, nl. de MCM_SETDAYSTATE message. Probleem is, dat als ik
code:
1
SendMessage(Kalender.Handle, MCM_SETDAYSTATE, 0, 0);

doe, de compiler klaagt dat hij MCM_SETDAYSTATE niet kent. Wat heb ik over het hoofd gezien? Waar wordt die message in gedefinieerd?

https://fgheysels.github.io/


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 15-09 19:59

Creepy

Tactical Espionage Splatterer

Zeer waarschijnlijk wordt die MSG gedefinieerd in dezelfde unit als waar die TMonthCal inzit, het is naar mijn idee geen standaard windows message.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Op donderdag 10 januari 2002 16:17 schreef Creepy het volgende:
Zeer waarschijnlijk wordt die MSG gedefinieerd in dezelfde unit als waar die TMonthCal inzit, het is naar mijn idee geen standaard windows message.
Naar mijn idee is het ook geen std windows message.
Maar ik denk niet dat het in dezelfde unit gedefinieerd zit, anders zou ik die error toch niet krijgen? Want die unit wordt automatisch tot mijn uses list toegevoegd als ik de calender op m'n form sleur, maar ik zal toch es kijken.

https://fgheysels.github.io/


Verwijderd

Op donderdag 10 januari 2002 16:05 schreef whoami het volgende:
code:
1
SendMessage(Kalender.Handle, MCM_SETDAYSTATE, 0, 0);
MCM_SETDAYSTATE kon ik niet vinden.
Zoeken in ComCtrls.pas gaf de volgende resultaten:
MCN_GETDAYSTATE en MCS_DAYSTATE

Misschien kun je hier wat mee?

  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
'k heb hem ondertussen gevonden. Hij staat in commctrl.pas.
Ik send nu wel die message maar het resultaat blijft uit. Zal nog maar wat verder zoeken zeker.

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Als ik volgende code in de OnDblClick event-handler van m'n calendar control zet, dan wordt de gekozen dag van de maand onmiddelijk vet gezet, zonder dat ik eerst van maand moet switchen. Probleem is nu wel dat hij die dag (bv. de 5de) voor iedere maand vet zet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
type
  TMDSArray = array[0..23767] of TMonthDayState;
  PMDSArray = ^TMDSArray;

.
.
.

procedure TfrmDetVerstrekking.TijdstippenCalendarDblClick(Sender: TObject);
var
  MonthCount: Integer;
  MDSP: PMDSArray;
  Indx : Integer;

  d, m, j : word;
begin

  MonthCount := MonthCal_GetMonthRange(TijdstippenCalendar.Handle, 
                           GMR_DAYSTATE, 
                           nil);

  GetMem(MDSP,MonthCount * SizeOf(TMonthDayState));

  DecodeDate(TijdstippenCalendar.Date, j, m, d);

  try

   for Indx := 0 to MonthCount - 1 do begin
     TijdstippenCalendar.BoldDays([d],MDSP^[indx]);
     SendMessage(TijdstippenCalendar.Handle,
             MCM_SETDAYSTATE, 
             Monthcount,
             LongInt(MDSP));

   end;

  finally
    FreeMem(MDSP);
  end;

In de OnGetMonthInfo event handler van de Calendar heb ik dan weer geen probleem om die dagen enkel voor de juiste maand vet te maken, omdat er in die handler een variable wordt meegegeven die aangeeft over welke maand het gaat maar hier worden de dagen maar vet gezet als ik eerst eens van maand verander.

Iemand die weet of er een functie ofzo is waardoor ik kan weten welke maand er nu in de kalender getoond wordt, zodat ik ervoor kan zorgen dat enkel de dagen van de juiste maand vet gezet worden?

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 06:24
Ok, FYI.
Ik heb het dus als volgt opgelost:

In de MonthCalendar toon ik maar 1 maand ipv 2 maanden. Dat lost het probleem op dat de bovenstaande code ook de dagen van de andere maanden in het vet zet. (Die dagen zie je dan namelijk niet).
In de OnGetMonthInfo event handler zet ik dan wel de juiste dagen van de maand vet. Die handler wordt opgeroepen als er een nieuwe maand getoond wordt, magv dat de dagen die door de code in de OnClick event handler vetjes gezet werden (maar niet zichtbaar waren), weer normaal getoond geworden.

https://fgheysels.github.io/

Pagina: 1