![]() |
Word to PChar
wie konvertiere ich word zu pchar??
|
Re: Word to PChar
Hi,
Wie willst du ein Word in ein PChar konvertieren? Du kannst höchstens das Word als Pointer auffassen also irgendwie sowas wie PChar(Pointer(Word)) oder sowas, aber ob das dann was sinnvolles ergibt bezweifle ich... Gruß Neutral General |
Re: Word to PChar
oh, die Frage ist wohl eher was du vor hast. Bei einem Word werden 2 Bytes des Speichers als vorzeichenlose zahl angesehen. Ein PChar hingegen ist ein Pointer der auf ein einen Char zeigt.
|
Re: Word to PChar
Zitat:
|
Re: Word to PChar
mhh ich musste nen datum (systemtime) in einen text string verwandeln, ich habs jetzt aber gerade hinnbekommen...
hab auf die funktion format zugegriffen... das läuft erstmal, aber komischer weise nur bei einem von 7 tag angaben, bei den restlichen haut er das 2008 in kauderwelsch, hab noch nicht ganz raus wieso.. |
Re: Word to PChar
Zeig mal etwas Code.
|
Re: Word to PChar
könntest du deinen Quelltext mal posten? Ich habe die Befürchtung die hast eine Funktion welche einen PChar zurück gibt welcher auf eine lokale Variable zeigt.
|
Re: Word to PChar
[OT] Äätsch, Jens, schneller :P [/OT]
|
Re: Word to PChar
[OT]@Deddy: Dafür habe ich die Macht deine Beiträge verschwinden zu lassen und dann merkt niemand das du schneller warst :wink:
[edit] Das ist natürlich nicht ernst gemeint[/edit] Jetzt aber zurück zum Thema [/OT] |
Re: Word to PChar
Zitat:
1. ich hab eine combobox, in der will ich ein bitmap vom wochentag anzeigen, und alle 6 tage nach dem heutigen tag!! 2. soll hinter jedem bitmap dann der jeweilige tag mit datum und jahr angegeben sein 3. wird das ganze in einer itemlist gespeichert, die ich dann mit einer for schleife durchgehe und den items der combobox zuweise!! nun ist mein problem, ich wollte sowenig units wie möglich nutzen...
Delphi-Quellcode:
procedure SetItemInfos;
var TempSystemTime, NewSystemTime: TSystemTime; i, TempInt: integer; begin; GetLocalTime(TempSystemTime); for i := low(ItemInfo) to high(ItemInfo) do begin; if i = 0 then TempInt := 1 else TempInt := 0; GetLocalTime(NewSystemTime); TempSystemTime.wDay := NewSystemTime.wDay + i; ItemInfo[i].DayImage := TempSystemTime.wDayOfWeek + i - 1; ItemInfo[i].DayPos := TempInt; ItemInfo[i].DateText := PChar(Format('%.2d:%.2d:%.3d', [TempSystemTime.wDay, TempSystemTime.wMonth, TempSystemTime.wYear])); end; end; das hab ich bisher nur leider haut es mit einfach die tage raufaddieren nicht hinn ;-( hatte gehofft er aktualisiert das automatisch, aber das macht er leider nicht... sonnst geht es schon, bis auf einen kleinen fehler halt noch in der datums angabe, die item weist er der combobox zu und packt die ganzen daten rein, nur convertiert er hier nur komischer weise einen eintrag von 7 richtig, bei den anderen hat er fehler mit der 08!! ps und ich weiß das ich es mit dem tag addieren so noch nciht lassen kann, werde mir nochwas einfallen lassen!! edit: achja diese zeile hier:
Delphi-Quellcode:
ist dafür gedacht, das der erste tag nen kleinen abstand z uden anderen in der combobox hat..
if i = 0 then TempInt := 1 else TempInt := 0;
|
Re: Word to PChar
Wo wird denn TempSystemTime befüllt? Hab ich was übersehen?
|
Re: Word to PChar
die hab ich dort als variablen, denn die werden beim ausführen der procedure neu eingelesen (augenblickliche zeit) und dann von dem zeitpunkt an, soll er mir halt 7 tage in der cbbox anzeigen..
|
Re: Word to PChar
@deddy: ich glaub du hast was übersehen. wenn ich mich richtig entsinne erwartet GetLocalTime einen var-parameter.
|
Re: Word to PChar
Dito,
Zeile 6:
Delphi-Quellcode:
GetLocalTime(TempSystemTime);
|
Re: Word to PChar
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal nen screenshot von der cbbox gemacht:
[edit=SirThornberry]Bild in Anhang gepackt - Mfg, SirThornberry[/edit] |
Re: Word to PChar
OK, eine Zeile nicht gesehen. Geht es nur darum, den Wochentag von einem Datum + x Tage zu ermitteln? Dann schau Dir nochmal meinen (editierten) Beitrag im anderen Thread an.
|
Re: Word to PChar
der fehler liegt wie erwartet hier:
Delphi-Quellcode:
Grund: Das Ergebnis von Format ist außerhalb der Funktion nicht mehr verfügbar. Das ganze würde dem gleich kommen:
ItemInfo[i].DateText := PChar(Format('%.2d:%.2d:%.3d', [TempSystemTime.wDay, TempSystemTime.wMonth, TempSystemTime.wYear]));
Delphi-Quellcode:
Das Ergebnis liegt also auf dem Stack und nach verlassen der Funktion zeigt zwar der Zeiger noch auf diese Stelle aber sobald etwas neues auf den Stack gepackt wird, wird auch der Wert überschrieben der irgendwann mal dort stand.
var
abc: String; begin [...] ItemInfo[i].DateText = PChar(abc); Noch besseres Beispiel:
Delphi-Quellcode:
procedure GibZahlAlsString(Zahl: Integer): PChar;
var meinString: String; begin meinString := IntToStr(Zahl); result = @Zahl[1]; end; |
Re: Word to PChar
Zitat:
|
Re: Word to PChar
Die Frage kann man am besten beantworten wenn du uns zeigst was ItemInfo ist.
Zur Zeit ist bei dir
Delphi-Quellcode:
ein Pointer (PChar ist nichts anderes). Wenn du also direkt in DateText Daten halten willst solltest du einen anderen Typ wählen. Anderenfalls musst du Speicher reservieren wo du die Daten dann hinpackst und darauf kannst du dann DateText zeigen lassen.
ItemInfo[i].DateText
|
Re: Word to PChar
Maybe I don't understand the question right because of my bad German Language knowledge but it seems to me you want to display a systemtime as string? Why not use SystemTimeToDateTime and use format?
|
Re: Word to PChar
ja klar hier:
Delphi-Quellcode:
type
TComboBoxItemInfo = record DayImage, DayPos : integer; DateText : pchar; end; |
Re: Word to PChar
Zitat:
|
Re: Word to PChar
Und warum hast du DateText als PChar definiert?
Willst du über dll-grenzen hinweg arbeiten? Wenn dem nicht so ist wäre es das einfachste du definierst DateText als String. |
Re: Word to PChar
hmm stimmt eigentlich mal sehen....
ok danke das geht schon mal, nun muss ich eigentlich nur noch wissen wie ich mit systemtime herrausfinde welcher wochentag ist, denn leider gehtest mit
Delphi-Quellcode:
nicht!! gibs noch ne möglichkeit???
systemtime.wday + 1;
|
Re: Word to PChar
I also defined DateTimeString function in JwaWinsta this is an api from utildll that (well the name says it all). It also takes care of localisation for you (it takes a filetime as input).
|
Re: Word to PChar
yes, but i must use the units sysutils, math and types to compile the prog. i want without these units to get a small filesize.. i should be all nonvcl..
|
Re: Word to PChar
You don't need all that, it's all winapi:
// This is the version for NT Terminal Server, 2000, XP/2003 and Server 2008 function DateTimeString(DateTime: PFILETIME; lpBuffer: PWideChar): PWideChar; stdcall; // This is a wrapped for all OS versions function DateTimeStringSafe(DateTime: PFILETIME; lpBuffer: PWideChar; cchDest: SIZE_T): PWideChar; stdcall; // This is the Vista version which takes an additional parameter with // maximum buffer size (you have to set it) function DateTimeStringVista(DateTime: PFILETIME; lpBuffer: PWideChar; cchDest: SIZE_T): PWideChar; stdcall; function DateTimeString; external utildll name 'DateTimeString'; function DateTimeStringVista; external utildll name 'DateTimeString'; function DateTimeStringSafe(DateTime: PFILETIME; lpBuffer: PWideChar; cchDest: SIZE_T): PWideChar; stdcall; begin // Zero Memory ZeroMemory(lpBuffer, cchDest * SizeOf(WCHAR)); // Are we running Vista? if IsVista then begin // Vista version Result := DateTimeStringVista(DateTime, lpBuffer, cchDest); end else begin // Other OS's (including server 2008!) Result := DateTimeString(DateTime, lpBuffer); end; end; |
Re: Word to PChar
Zitat:
|
Re: Word to PChar
It's part of the Jedi Apilib.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz