Entwickler-Ecke

Windows API - Vormonat als LongMonthNames auslesen


lemi4ever - Sa 16.12.06 21:36
Titel: Vormonat als LongMonthNames auslesen
Ich bin im Moment soweit das ich den Vormonat in einer Zahl auslesen kann. Wobei ich hier unterstützung bekommen habe. Es läuft auch. Jedoch erhalten ich im Moment den Vormonat als Zahl.
Jetzt muss ich da ich den Vormonat nicht als Zahl sondern als Wort ausweisen möchte mit einer If Anfrage aus z.B. 12 Dezember machen. Hat da jemand eine Lösung den Vormonat direkt als Text auslesen zu können ?


Delphi-Quelltext
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:
var  datum: TDateTime;
     vjahr, vmonat, vtag : word;
     jahr, monat, tag : word;

begin
datum := now;
DecodeDate(datum,jahr,monat,tag);
vMonat := Monat -1;
if vMonat < 1 then
    vMonat := 12;
vtag := tag -1;
if vTag < 1 then
    case vMonat of
      1357812: vTag := 31;
      46911: vTag := 30;
      2:
begin
        //Februar im Schaltjahr oder nicht?
          if IsLeapYear(Jahr) then
            vTag := 29
          else
            vTag := 28;
        end;
        end;

vjahr := jahr -1;

Edit1.Text :=(IntToStr(vMonat));


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 16.12.2006 um 21:44


hansa - Sa 16.12.06 21:49


Delphi-Quelltext
1:
2:
3:
  const LongMonthStr : array[1..12of string[9] = (
                   'Januar''Februar''März''April''Mai''Juni''Juli',
                   'August''September''Oktober''November''Dezember');


Aber Achtung ! Das ist noch keine verwendbare Variable !!


lemi4ever - Sa 16.12.06 21:56
Titel: Vormonat als LongMonthNames auslesen
user profile iconhansa hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
3:
  const LongMonthStr : array[1..12of string[9] = (
                   'Januar''Februar''März''April''Mai''Juni''Juli',
                   'August''September''Oktober''November''Dezember');


Aber Achtung ! Das ist noch keine verwendbare Variable !!



Dann gebe ich aber schon wieder die Namen der Monate in den Code ein. Mein Tool wir auf PC laufen wo das Betriebssystem Deutsch, Französisch, Italienisch oder English sein kann. Es wäre dann schön wenn die Vormonatnamen auch in der richtigen Sprachen anzeigt werden.

Gruss

Michael


hansa - Sa 16.12.06 22:08

Dann verwende $IFDEF und wenn die Wörter im Quelltext gar nicht auftauchen sollen, dann schreibe sie in eine DB/Datei.


Christian S. - Sa 16.12.06 22:36

Hallo!

Delphi stellt mit GetLocaleStr eine Kapselung der Suche im MSDN GETLOCALEINFO-Funktion von Windows zur Verfügung. Die kann man z.B. so benutzen:


Delphi-Quelltext
1:
2:
januarStr := GetLocaleStr(LOCALE_SYSTEM_DEFAULT, LOCALE_SMONTHNAME1, 'nicht gefunden');
februarStr := GetLocaleStr(LOCALE_SYSTEM_DEFAULT, LOCALE_SMONTHNAME2, 'nicht gefunden');


Lannes - Sa 16.12.06 23:43

Hallo,

ist doch einfach:

Delphi-Quelltext
1:
januarStr := LongMonthNames[1];                    


Christian S. - So 17.12.06 00:11

Ah, den kannte ich auch noch nicht, ist natürlich einfacher.

Wird aber auch über GetLocalStr gefüllt ;-)


Lannes - So 17.12.06 01:05

Hallo,

und GetLocalStr kenn ich, ... äh, Delphi 3 nicht, aber man kann ja GETLOCALEINFO direkt einsetzen.

@user profile iconlemi4ever

was hälst Du denn davon:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
function Vormonat(aDatum: TDateTime): String;
var J, M, T : word;
begin
  DecodeDate(aDatum,J,M,T);
  aDatum := EncodeDate(J,M,1);
  Result := FormatDateTime('MMMM',aDatum-1);
end;