Toon posts:

[delphi] messagebox

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik heb het volgende probleempje:

code:
1
2
3
4
5
6
7
8
9
10
procedure TFormOfferteOverzicht.MenuStatusDefinitiefClick(Sender: TObject);
var keuze : integer;
begin
  keuze := Application.Messagebox('Orderstatus wordt ''Definitief'', OK?', 'Bevestigen', MB_YESNO);
  if (keuze = IDYES) then
    begin
      Produkt.updatevoorraad(data.QOrderOverzichtOrderID.AsString,'0','-');
      Offerte.Status(data.QOrderOverzichtOrderID.AsString,'Definitief');
    end; // if (keuze = IDYES) then
end; //procedure TFormOfferteOverzicht.MenuItem2Click(Sender: TObject);


het gaat met name om de regel:
code:
1
keuze := Application.Messagebox('Orderstatus wordt ''Definitief'', OK?', 'Bevestigen', MB_YESNO);


Ik zou graag een variabele 'status' van het type string willen gebruiken om de status in de messagebox weer te geven, dus:

code:
1
  keuze := Application.Messagebox('Orderstatus wordt '+status+', OK?', 'Bevestigen', MB_YESNO);


Maar dan krijg je de volgende error:
Incompatible types: 'string' and 'PAnsiChar'

Dit komt volgens mij door dat je de string uit meerdere stukken aan elkaar plakt. Zit er een standaard messagebox in Delphi 7 waarmee je wel variable in de messagebox kan weergeven?

[ Voor 9% gewijzigd door Verwijderd op 14-08-2003 16:01 ]


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11:04

Robtimus

me Robtimus no like you

Probeer eens het volgende:
code:
1
2
str = 'Orderstatus wordt ' + status + ', OK?';
keuze := Application.Messagebox(PChar(str), 'Bevestigen', MB_YESNO);
waarbij str natuurlijk een string is.

[ Voor 11% gewijzigd door Robtimus op 14-08-2003 16:03 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

gewoon pchar omheen zetten dus Application.Messagebox('Orderstatus wordt '+pchar(status)+', OK?', 'Bevestigen', MB_YESNO);

geteste code diw wel werkt:

code:
1
2
3
4
var status : string;
begin
  Application.Messagebox(pchar('Orderstatus wordt ' + status + ', OK?'), 'Bevestigen', MB_YESNO);
end;

[ Voor 50% gewijzigd door jopiek op 14-08-2003 16:05 ]

Cogito Ergo Credo


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Gewoon MessageDlg gebruiken ipv Application.MessageBox.

https://fgheysels.github.io/


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11:04

Robtimus

me Robtimus no like you

jopiek schreef op 14 August 2003 @ 16:02:
gewoon pchar omheen zetten dus Application.Messagebox('Orderstatus wordt '+pchar(status)+', OK?', 'Bevestigen', MB_YESNO);
Concatenatie op PChars gaat niet helaas.

Maar daar was je dus al achter.

[ Voor 14% gewijzigd door Robtimus op 14-08-2003 16:06 ]

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

whoami schreef op 14 August 2003 @ 16:04:
Gewoon MessageDlg gebruiken ipv Application.MessageBox.
domme opmerking, er zit een duidelijk verschil daartussen stout manneke, hoe wilde jij daar een eigen caption aan geven bijv???
[...]
Concatenatie op PChars gaat niet helaas.
idd, had daar ff niet aangedacht, maar kwam dat direct tegen met 'n testje...

[ Voor 21% gewijzigd door jopiek op 14-08-2003 16:07 ]

Cogito Ergo Credo


Verwijderd

Topicstarter
IceManX schreef op 14 August 2003 @ 16:02:
Probeer eens het volgende:
code:
1
2
str = 'Orderstatus wordt ' + status + ', OK?';
keuze := Application.Messagebox(PChar(str), 'Bevestigen', MB_YESNO);
waarbij str natuurlijk een string is.
Dit werkt perfect...

heel simpel eigenlijk, maar kom er maar eens op! ;)
bedankt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
jopiek schreef op 14 August 2003 @ 16:06:
[...]


domme opmerking, er zit een duidelijk verschil daartussen stout manneke, hoe wilde jij daar een eigen caption aan geven bijv???
Door het DlgType mee te geven.
De caption in de TS zijn voorbeeld, is gewoon 'Bevestigen'.

Als hij doet:
code:
1
MessageDlg ('blaat', mtConfirmation, [mbOk], 0);


Dan staat er 'Confirm', wat het engels is voor 'bevestigen'.

Nu kan je in je consts.pas dat wel aanpassen, zodat er ook bevestigen komt.

Verder staat je toontje mij niet zo aan

https://fgheysels.github.io/


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

whoami schreef op 14 augustus 2003 @ 16:13:
[...]


Door het DlgType mee te geven.
De caption in de TS zijn voorbeeld, is gewoon 'Bevestigen'.

Als hij doet:
code:
1
MessageDlg ('blaat', mtConfirmation, [mbOk], 0);


Dan staat er 'Confirm', wat het engels is voor 'bevestigen'.

Nu kan je in je consts.pas dat wel aanpassen, zodat er ook bevestigen komt.

Verder staat je toontje mij niet zo aan
zie emailtje whoami, lijkt me voor de rest niet verstandig om consts.pas aan te passen, er zijn wel andere manieren om localisation voor elkaar te krijgen (zie o.a. Torry's Delphi Pages).
Sowieso is de vraag of het aanpassen van een native file volledig legaal is, daarnaast is het neit handig want op het ene moment wil je wellicht nl hebben maar op het andere fr of gewoon uk.
Er is op zich niets mis met de messagebox, maar normaal is de dialogbox idd handiger... [tenzij je de caption altijd dynamisch zelf wilt bepalen...]

aanvulling:
borland geeft aan dat consts.pas wel vertaald mag worden, maar toch is dat een lelijke oplossing. Zie ook: Taal van de Messagedialogs

[ Voor 20% gewijzigd door jopiek op 14-08-2003 17:25 ]

Cogito Ergo Credo


Verwijderd

Ik heb zelf ook een multi lingual applicatie en had dit probleem ook.

Ik heb dit opgelost door een eigen messagedlg te maken in de vorm van een form met daar de benodigde buttons op die wel of niet zichtbaar worden. Nu kun je dan via een plugin of iets dergelijks de captions veranderen in de juiste taal.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je hoeft consts.pas dus niet aan te passen. Aangezien daar netjes resource strings gedeclareerd worden kan je ze gewoon 'overriden' met je eigen resource strings. Gewoon een nieuwe unit maken (bv constsNL.pas) als copy van consts.pas en daar alles naar het Nederlands vertalen. En wanneer je de Nederlandse tekst wil gebruiken include je de unit. That is it! En geen VCL aagenpast. Jopiek meld dit al in zijn aanvulling, maar noemt dit een lelijke oplossing. Daar ben ik het niet mee eens. Het is juist een geweldige oplossing IMHO. Het is dus ook niet nodig je eigen messagedlg te schrijven, alhoewel je dat wel de volledige controle geeft natuurlijk.

We adore chaos because we like to restore order - M.C. Escher

Pagina: 1