Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok NapísalOffline : 25.07.2011 13:49

Dobrý deň, poprosím o pomoc,
v projekte používam knižnicu DLL a v rámci zmeny grafiky výstupov som chcel vymeniť funkciu
MessageDlg za funkciu MessageBox. Pri kompilácii knižnice mi hlási chyby

[Error] : Incompatible types: 'HWND' and 'PChar'
[Error] : Incompatible types: 'Integer' and 'PChar'

pričom keď mám túto novú funkciu v projekte tak je to OK. Neviem, kde je chyba. Vďaka za Váš čas. Uvádzam fragment kódu.


Kód:
uses
  Windows,
  Messages,
  Dialogs,
  SysUtils,
  Classes;

{$R *.res}

function hlaska( jj : String) : Boolean;
begin
  Result := true;

.......

//           MessageDlg(' Zadaná hodnota nie je číslo !',mtError, [mbOK],0);
            MessageBox(PChar('Zadaná hodnota nie je číslo !'),
            'Upozornenie', mb_iconwarning + mb_ok);
end;


Offline

Skúsený užívateľ
Skúsený užívateľ
Problem s DLL

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.07.2011 13:57

MessageBox ma totiz ako prvy parameter handle okna, ktoremu bude tento message box patrit. Viac info:
http://msdn.microsoft.com/en-us/library/ms645505(v=vs.85).aspx

Ak nevies alebo sa ti nechce zistovat, aky handle ma aplikacia, ktora tuto DLL pouziva, tak tam jednoducho daj nulu a message box nebude mat rodicovske okno. Cize mozes to upravit takto:
Kód:
MessageBox( 0, PChar('Zadaná hodnota nie je číslo !'),
            'Upozornenie', mb_iconwarning + mb_ok );


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.07.2011 14:20

Fico píše:
Ak nevies alebo sa ti nechce zistovat, aky handle ma aplikacia, ktora tuto DLL pouziva, tak tam jednoducho daj nulu a message box nebude mat rodicovske okno. Cize mozes to upravit takto:
Kód:
MessageBox( 0, PChar('Zadaná hodnota nie je číslo !'),
            'Upozornenie', mb_iconwarning + mb_ok );

hwnd=0 nepatri nahodou oknu desktopu ?


Offline

Skúsený užívateľ
Skúsený užívateľ
Problem s DLL

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.07.2011 14:31

@coldak - tak som sa to ucil aj ja, ale v MSDN to teraz pise akosi inak, tak som radsej nechcel byt nepresny.
MSDN píše:
A handle to the owner window of the message box to be created. If this parameter is NULL, the message box has no owner window.

V kazdom pripade, na funkcnosti to nic nemeni.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.07.2011 18:50

otazne je ci NULL je to iste ako 0 :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Problem s DLL

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.07.2011 21:38

Ak sa jedna o C++, tak NULL je 0. :)

Kód:
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif


Ak sa nejedna o C++, tak je to pretypovana nula na smernik na void. Dalo by sa povedat, ze v Delphi je ekvivalentom nil a ten nie je typovo zhodny s typom HWND, takze to je dalsia odpoved, ze za NULL je povazovana 0.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok Napísal autor témyOffline : 26.07.2011 16:29

Vďaka za pomoc,
funguje to s hodnotou 0 teda

MessageBox( 0, PChar('Zadaná hodnota nie je číslo !'),
'Upozornenie', mb_iconwarning + mb_ok );

ale v aplikácii D6 mi to funguje podľa helpu

function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;

Neviem v čom je problém, ale ide to.

// pridané po 28 minútach od posledného príspevku

Ešte by som dal placu tento problém, ktorý sa mi v aplikácii D6 nevyskytuje

if Sender is TEdit then
begin
...
end;

if Sender is TLabeledEdit then
begin
...
end;

a sice, že nepozná triedu TLabeledEdit. Vďaka


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 26.07.2011 17:22

uvediem ta trochu do obrazu, neviem presne ako je to v D6 no v D7 je to nasledovne:
mas standardne dve implementacie funkcie messageBox . prva je ta co ti popisoval fico. jedna sa iba o zavolanie api funkcie windows. ta vyzaduje ako prvy parameter handle vlastnickeho okna. ak tam das 0 cize za vlastnika urcis desktop tak to bude mat ine spravanie ako keby si messageboxu priradil handle samotnej aplikacie ktora messagebox vyvolala. to znamena ze v pripade ze vlastnikom sa stane desktop tak budes moct manipulovat nadalej s aplikaciou cize aj vyvolavat niekolkonasobne instancie messageboxu. pokial by si messageboxu pridelil handle vlastnickej aplikacie tak messagebox bude modalny cize ostatne okna aplikacie budu nedostupne pokym nezatvoris messagebox. pokial ti vyhovuje ze aplikacia bude aj nadalej pristupna aj ked budes mat vyvolany messagebox tak ti handle 0 staci . pokial vsak potrebujes zamedzit pristupu do aplikacie kym nebude potvrdeny messagebox tak zadaj handle aplikacie cize
Kód:
MessageBox(application.handle, PChar('Zadaná hodnota nie je číslo !'),
             'Upozornenie', mb_iconwarning + mb_ok );

odhladom druhej moznosti , miesto priameho zavolania windows api funkcie mozes zavolat metodu aplikacie
Kód:
 application.MessageBox( PChar('Zadaná hodnota nie je číslo !'),
             'Upozornenie', mb_iconwarning + mb_ok );
toto je ekvivalent k moznosti messagebox(application.handle, ...
Citácia:
Ešte by som dal placu tento problém, ktorý sa mi v aplikácii D6 nevyskytuje
a v akej verzii sa ti ten problem vyskytuje ?


Offline

Skúsený užívateľ
Skúsený užívateľ
Problem s DLL

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 26.07.2011 17:23

coldak ti pekne vysvetlil ako to je s funkciou MessageBox, ja este dodam k tomu problemu, ze ta funkcia nejde v DLL projekte:
Tato metoda triedy Application, ktoru popisal coldak, sa nachadza v unite Forms, ktory standardne v DLL projekte nie je pripojeny. Skus ho teda pripojit v tvojom projekte, ci ti to bude fungovat i ked nie som si velmi isty, ak v DLL nevytvaras nejake okno.

jasug píše:
a sice, že nepozná triedu TLabeledEdit

Opat bude treba pridat unit ExtCtrls, kde sa nachadza deklaracia tohto typu.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 05.09.08
Prihlásený: 11.11.22
Príspevky: 69
Témy: 37
Príspevok Napísal autor témyOffline : 26.07.2011 20:40

Vďaka za perfektné vysvetlenie, je to ok, urobil som to volaním triedy Application, druhý problém som vyriešil pridaním unitu ExtCtrls a chodí to. Vďaka za Váš čas.


Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. php_mssql.dll (tiež sqlsrv.dll) problém, podobne ADOdb

v PHP, ASP

2

366

18.01.2017 8:51

mackooo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s kniznicou shell32.dll a sti.dll

v Operačné systémy Microsoft

3

555

18.04.2009 9:49

Horalka Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Run DLL problém (tsiVi032.dll)

v Ostatné

4

575

15.09.2013 0:09

Marko289 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll a shell32.dll Nepovolene premiestnenie...???

v Operačné systémy Microsoft

0

574

26.09.2007 13:22

kolci Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. user32.dll alebo SHELL32.dll

v Operačné systémy Microsoft

1

756

11.08.2010 19:15

Revolution Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s .dll

v Operačné systémy Microsoft

5

449

26.11.2008 21:29

br4n0 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problém s drvlab.dll

v Operačné systémy Microsoft

12

625

29.02.2008 21:56

Tomas1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. WinXP Hal.dll problem.

v Operačné systémy Microsoft

2

281

15.05.2014 18:11

Makakus Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problem s winnet.dll

v Operačné systémy Microsoft

0

269

12.02.2011 15:05

lezgy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. NFS RUN dll problem

v Počítačové hry

2

587

19.01.2012 17:05

MoonDreams Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. DAYZ problém s wow64.dll

v Počítačové hry

0

351

21.07.2015 22:48

Hi332 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. problem s wordom (mshy32.dll)

v Ostatné programy

5

720

10.08.2008 9:30

petos Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Chybná bitová knižnica-problém s dll

v Antivíry a antispywary

3

1015

20.04.2011 17:22

petto512 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem s PC - BSOD nv4_disp.dll

v Operačné systémy Microsoft

7

956

26.07.2010 17:31

Q.Q Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problem pri instalacii XP (hal.dll)

v Operačné systémy Microsoft

1

735

30.01.2011 11:21

stell Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Problém s procesom svchost.exe & súborom atikvmag.dll

v Operačné systémy Microsoft

2

361

23.12.2013 12:56

.CWs Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra