display German special characters correctly in Delphi 2007 - delphi

I need to display German special characters correctly in Delphi 2007 as for now I get characters like this "ü" appear like "?" in label components
any advise
Thanks

Unexpected question mark (?) shows up when text goes trough a code page conversion that fails.
Since Delphi 2007 is not Unicode Enabled, your label's Caption is an AnsiString. The text you're putting in there goes trough at least one code page conversion that fails, and you'll have to figure out where the conversion takes place and why it's failing.
Common causes for code page conversions:
The text for your Label comes from the DFM (you wrote it in Object Inspector). Your machine and the test machine both use different "default code pages for non-Unicode applications". You should never see this while testing on your machine.
The text for your Label came from a database, and either the database has the wrong code page or your test machine has the wrong code page: when Delphi helpfully tries to convert the code page, it fails.
The Character Set property of your Label's font is wrong.
Here's a bit of code to put the ü character in a Label for testing. The code selects the EASTEUROPE_CHARSET so I know I'm dealing with code page 1250. I'm doing so because the other Charset constants either select unusable code pages (that don't include the "ü") or select a code page that depends on the OS (ie: no actual change).
procedure TForm1.Button1Click(Sender: TObject);
begin
Label1.Font.Charset := EASTEUROPE_CHARSET;
Label1.Caption := Char(252);
end;

Related

Will Delphi TEdit control allows texts containing newline character?

I am using TEdit in Delphi XE3, as it is a single line control. I don't expect it will allow text with new line character. However, today one of my customer send a file which contains the data from the edit box, which is:
'DN-60C4A18F-53A567CF-2E468912'#$D#$A'DN-60C4A18F-53A567CF-2E468912'
It contains a new line character #$D#$A. How can it be? And how to prevent this from occurring again?
Thanks

TDBrichedit displays plain text rather than rich text

The context is that I am maintaining an application running on delphi 7 with the BDE. I programmatically assign dbricheditcontrols' datafields to allow users to edit rtf documents. When the relevant forms open, the unformatted text is displayed and then once say the person moves onto the next document, suddenly the rich text kicks in; I suspect it must be an initialisation problem of sorts, but what am I missing; could not locate a solution online.
Thanks
Ordinarily, I would not post an answer to a q which states
I programmatically assign dbricheditcontrols' datafields to allow users to edit rtf documents
but fails to include the code that you are using - you should have provided an MCVE (see https://stackoverflow.com/help/mcve).
However, what you say sugggests that you may be going about what you are trying to do the wrong way. You say you are using a TDBRichEdit component, but if you are using it correctly, it should not require any programmatic assignment of datafields to do it: you simply need to connect the component to the TTable or TQuery you are using via a TDataSource component, and configure the DBRichEdit to access whatever field of the TTable/TQuery that stores the richedit text. That can be done a design time using the Object Inspector in the IDE to set properties and does not require any code.
So, it seems to me that either you are not using the DBRichEdit correctly, or you are trying to do something that you have not explained in your q.
You can satisfy yourself that a DBRichEdit works automatically, without needing to load or save its contents in code, as follows:
Open the FishFacts demo
Add a TDBNavigator and a TDBRichEdit to the form. Set the DataField property of DBRichEdit1 to Notes.
Set the ReadOnly property of Table1 to False. Then set Table1's Active property to True.
Compile and run the project. While it's running
Start WordPad.Exe and create a bit of richtext in it. Copy it to the clipboard. Click the Save speedbutton of DBNavigator1.
Paste the richtext into DBRichEdit1.
You should find that you can navigate away from and back to the edited record and the richtext will be automatically reloaded.
Also, the following code works fine for me to load the Notes field from an .Rtf file
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Edit;
TMemoField(Table1.FieldByName('Notes')).LoadFromFile('D:\test.rtf');
end;
and does not initially display the unformatted text as you describe. So I'm fairly sure you problem is arising in code of yours that you haven't shown us.
Btw, the only reason I am posting this as an "answer" is that there is more to say than will comfortably fit in a comment.

PasswordChar in Delphi XE8's TMemo

I spent a few hours searching Google to see if anyone had shared their articles, but came up empty-handed.
If it's possible, I want to know how to enable/disable the PasswordChar in Delphi XE8's TMemo to hide user input like in TEdit. ? Maybe via a checkbox!
So when the checkbox is checked then all text turned to asterisks, and if the checkbox is unchecked, all text back to normal..
The VCL memo control is a loose wrapper around the Win32 multiline edit. The password character functionality of the edit control is only available for single line edits.
The behaviour is controlled by the ES_PASSWORD style for which the documentation says:
Displays an asterisk (*) for each character typed into the edit control. This style is valid only for single-line edit controls.
The FMX memo control offers no password character functionality for the multiline memo control.
Presumably these frameworks don't offer what you want because passwords are entered in single line edit controls. Developers tend not to provide functionality that has no clear case for being used.
Your options:
Use a single line TEdit.
Write your own multiline memo that supports your desired functionality.
Find a third party multiline memo that supports your desired functionality.
Now, since your question is so general I have assumed that you want full support for single line password character. That is, the user enters text and it appears masked.
But maybe you actually don't need editability. In that case it is simple enough. Do the following:
Load or add the true text into a separate TStringList.
When you want to display the true text assign the string list to the memo.
When you want to hide the content, process the true text into whatever you want to display, and display that.
Make the memo control read only.
if cBoxPassword.checked=false then
edtpassword.PasswordChar:='*';
if cBoxPassword.checked=true then
edtPassword.PasswordChar:=#0;

hmodule in D5 willl not complie

I have incoming text from FieldByName(aFld).AsString that may sometimes contain HTML tags. I want to parse the text and use something like this to display it:
How to load and save documents in TWebBrowser in a Delphi-like way
If the text has HTML tags, I'd like any URLs to be highlighted. They need not work as clickable, but visually this is what I am after.
The component in the article comes with a D6+ example program, but it is balking at HModule. I can't compile in D5 as it does not seem to recognize HModule. What is it? How do I get around it?
I tried using TWebBrowser and the following but the Tags do not get highlighted to look like they are clickable.
How to load HTML directly to a WebBrowser
HModule is declared in the Windows unit. Make sure that unit is in your uses clause.

Getting unformatted text from RichEdit

I have a Richedit that allows my users to format and view error messages that display within my application.
I now need to be able to export the text only (no formatting) out to another database that their trouble-ticket system uses.
I have tried all the combinations of PlainText I can think of and I always still get the rtf formatting.
How can I get the text only?
To obtain the unformatted text, simply use RichEdit1.Text.
Answering the direct question that you asked, the Text property is precisely what you are looking for. For some reason it doesn't show up in the TRichEdit documentation, but it is inherited from TCustomEdit.
It sounds to me (following comments to Andreas' answer) as though what you really need to do it as follows:
Pull the RTF from the DB into a memory stream or perhaps a blob stream.
Call RichEdit.LoadFromStream passing that stream, making sure PlainText is False.
Then read RichEdit.Text to get the unformatted text.
At the moment you are simply putting the RTF into the control as plain text. You need to put it into the control as rich text, and for that you need LoadFromStream.
i use this way to get unformatted text
procedure TMainForm.O1Click(Sender: TObject);
begin
if sOpenDialog1.Execute then
sRichEdit1.Lines.LoadFromFile(sOpenDialog1.FileName);
sMemo1.Text := sRichEdit1.Text;
sRichEdit1.Clear;
sRichEdit1.Text := sMemo1.Text;
for save file you have to choices
save as .txt the text still in memo but all change you made will be in richedit only so you have to move text to memo after done all your changes then save it from memo
save as .rtf just save it from richedit
I hope thats help you

Resources