casa
Top.Mail.Ru Yandeks.Metrika
Forum: "WinAPI";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

giù

Come creare moduli con controlli diversi su una pura API? Trova rami simili


Oxy2   (2001-10-23 23:23) [0]

Ciao a tutti!

Qualcuno può inviare o almeno suggerire dove prendere semplici esempi di creazione di moduli, controlli diversi su di essi, creazione di gestori di eventi per questi controlli, ecc. su pura API (su Delphi o come ultima risorsa su C). In generale semplici esempi di programmazione sull'API.



Jochua   (2001-10-24 06:25) [1]

Scrivi dimmi cosa so



Oxy2   (2001-10-25 00:55) [2]

Bene, così. È necessario creare un modulo sul quale ci sarà un ListView e due pulsanti (Button). Dovrebbe essere possibile gestire il pulsante e gli eventi eventi da ListView.



Иван Шихалев   (2001-10-25 01:10) [3]

E quali WM_COMMAND e WM_NOTIFY non ti vanno bene?



Alien   (2001-10-25 02:51) [4]

> Oxy2
Dimentica gli eventi. Non ci sono eventi nell'API Win. Ci sono messaggi e li elaboriamo.



Jochua   (2001-10-25 08:01) [5]

Guarda, in qualche modo ho fatto un esempio per la stessa richiesta:

program listbox;

uses
windows, messages;

var
wc : TWndClassEx;
Wnd : HWND;
Msg : TMsg;

function WindowProc(wnd : HWND; Msg : Integer; WParam : WParam; LParam : Longint): Longint; stdcall;
const
BUFFER = MAX_PATH;
var
I : Integer;
CurDir : array[0..BUFFER-1] of Char;

Begin
Result := 0;
case msg of

wm_destroy :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

wm_command :
Begin
case loword(wParam) of
200 :
case hiWord(wParam) of
lbn_selchange :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 222), CurDir);
end;
lbn_dblclk :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 221), CurDir);
end;
end;

100 :
begin
GetCurrentDirectory(SizeOf(CurDir), CurDir);
DlgDirList(Wnd, CurDir, 200, 0, DDL_DIRECTORY);
end;

end;
End;
else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;

begin
wc.cbSize := sizeof(wc);
wc.style := cs_hredraw or cs_vredraw;
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, idc_arrow);
wc.hbrBackground := COLOR_BTNFACE + 1;
wc.lpszMenuName := nil;
wc.lpszClassName := "listbox example";

RegisterClassEx(wc);

Wnd := CreateWindowEx(0, "listbox example", "ListBoxes Demo",
ws_overlapped or ws_sysmenu,
100, 150, 360, 200,
0, 0,
Hinstance, nil);

CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NIL, WS_BORDER or LBS_NOTIFY or WS_CHILD or WS_VISIBLE or LBS_MULTICOLUMN or LBS_SORT or LBS_EXTENDEDSEL, 10, 70, 200, 100, Wnd, 200, hInstance, NIL);

CreateWindowEx(0, "STATIC", "dbl_click:", WS_VISIBLE or WS_CHILD, 10, 10, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 10, 300, 20, Wnd, 221, hInstance, NIL);

CreateWindowEx(0, "STATIC", "Select:", WS_VISIBLE or WS_CHILD, 10, 40, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 40, 300, 20, Wnd, 222, hInstance, NIL);

CreateWindowEx(0, "BUTTON", "Scan Directory", BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE, 220, 130, 120, 25, Wnd, 100, hInstance, NIL);

ShowWindow(Wnd, CmdShow);

While GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.




Jochua   (2001-10-25 08:03) [6]

Guarda, in qualche modo ho fatto un esempio per la stessa richiesta:

program listbox;

uses
windows, messages;

var
wc : TWndClassEx;
Wnd : HWND;
Msg : TMsg;

function WindowProc(wnd : HWND; Msg : Integer; WParam : WParam; LParam : Longint): Longint; stdcall;
const
BUFFER = MAX_PATH;
var
I : Integer;
CurDir : array[0..BUFFER-1] of Char;

Begin
Result := 0;
case msg of

wm_destroy :
Begin
postquitmessage(0);
exit;
Result:=0;
End;

wm_command :
Begin
case loword(wParam) of
200 :
case hiWord(wParam) of
lbn_selchange :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 222), CurDir);
end;
lbn_dblclk :
begin
I := SendMessage(lParam, LB_GETCURSEL, 0, 0);
SendMessage(lParam, LB_GETTEXT, I, Integer(@CurDir));
SetWindowText(GetDlgItem(Wnd, 221), CurDir);
end;
end;

100 :
begin
GetCurrentDirectory(SizeOf(CurDir), CurDir);
DlgDirList(Wnd, CurDir, 200, 0, DDL_DIRECTORY);
end;

end;
End;
else
Result := DefWindowProc(wnd, msg, wparam, lparam);
end;
End;

begin
wc.cbSize := sizeof(wc);
wc.style := cs_hredraw or cs_vredraw;
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hIcon := LoadIcon(0, IDI_APPLICATION);
wc.hCursor := LoadCursor(0, idc_arrow);
wc.hbrBackground := COLOR_BTNFACE + 1;
wc.lpszMenuName := nil;
wc.lpszClassName := "listbox example";

RegisterClassEx(wc);

Wnd := CreateWindowEx(0, "listbox example", "ListBoxes Demo",
ws_overlapped or ws_sysmenu,
100, 150, 360, 200,
0, 0,
Hinstance, nil);

CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NIL, WS_BORDER or LBS_NOTIFY or WS_CHILD or WS_VISIBLE or LBS_MULTICOLUMN or LBS_SORT or LBS_EXTENDEDSEL, 10, 70, 200, 100, Wnd, 200, hInstance, NIL);

CreateWindowEx(0, "STATIC", "dbl_click:", WS_VISIBLE or WS_CHILD, 10, 10, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 10, 300, 20, Wnd, 221, hInstance, NIL);

CreateWindowEx(0, "STATIC", "Select:", WS_VISIBLE or WS_CHILD, 10, 40, 60, 20, Wnd, 0, hInstance, NIL);
CreateWindowEx(0, "STATIC", NIL, WS_VISIBLE or WS_CHILD, 75, 40, 300, 20, Wnd, 222, hInstance, NIL);

CreateWindowEx(0, "BUTTON", "Scan Directory", BS_PUSHBUTTON or WS_CHILD or WS_VISIBLE, 220, 130, 120, 25, Wnd, 100, hInstance, NIL);

ShowWindow(Wnd, CmdShow);

While GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.




Oxy2   (2001-10-25 23:50) [7]

Ciao a tutti!

2Ivan Shikhalev
> E quali WM_COMMAND e WM_NOTIFY non ti vanno bene?
Possono andare bene con me, ma io ancora non lo so. :-)))
Bene, ho scritto che imparo solo la programmazione su una pura API. In precedenza, ho utilizzato anche l'API, ma solo alcune delle singole funzioni di cui avevo bisogno, ma sulla pura API sto ancora imparando. Finora so solo come creare finestre e gestire i loro messaggi. In linea di principio, ho provato a creare altri controlli sulla finestra, ma per ognuno di essi ho creato una funzione finestra separata. Non mi è piaciuto molto (e se ho i pulsanti 100) e ho pensato che potessero esserci modi più semplici. Ecco perché ho fatto questa domanda.

2Alien
> Dimentica gli eventi. Non ci sono eventi nell'API Win. Ci sono messaggi, qui e> li elaborano.
So che in Windows non sono eventi, ma mesages. E 'solo per abitudine, rotto. :-))

2Jochua
ENORME grazie per l'esempio. Ma ho ancora una domanda. Mi piacerebbe usare un listview, non una listbox. Non dirmi quale sia il suo nome in classe.



Jochua   (2001-10-26 06:28) [8]

Aprire il file rw32core.dll (questo è in BIN da Delphi) e trovare - SysListView32. Se si creano oggetti tramite WinAPI, ignorare questa libreria. E lì viene dichiarato tutto ciò che Delphi può capire. Quindi apri Messages.pas - questo è Source / RTL / Win - e guardiamo tutti i messaggi sull'oggetto di cui abbiamo bisogno.



Oxy2   (2001-10-26 23:34) [9]

2Jochua
Non ho capito niente. E come funziona allora VC ++ senza questo rw32core.dll. Qui sto scrivendo invece di creare un ListBox nel tuo esempio come una linea

CreateWindowEx (WS_EX_CLIENTEDGE, "SysListView32", NIL, WS_CHILD oppure
WS_VISIBLE o WS_VSCROLL o WS_BORDER o WS_CLIPSIBLINGS, 10, 70, 200, 100, Wnd, 200, hInstance, NIL);

Ma il ListView non vuole creare qualcosa. Viene visualizzata una finestra, ma non vi è alcun ListView su di esso.



Jochua   (2001-10-29 10:04) [10]

Questo file è necessario solo per Delphi, per VC ++ tutte le descrizioni sono in file con estensione ".H". Appena controllato (D5, Win98) tutto funziona. Se vuoi puoi scrivere sul sapone, in una delle risposte c'è l'indirizzo.



nikkie   (2001-10-29 13:35) [11]

> Joshua
una specie di schifo. dove rw32core.dll?
il suo nome prodotto è Borland Resource Compiler DLL
nessun extra Le librerie Borland non sono richieste quando si scrive in api.

> Oxy2
Prima di utilizzare i controlli comuni, chiamare InitCommonControlsEx



Jochua   (2001-10-29 13:53) [12]

> nikkie
Né cos'è questa assurdità. Dai un'occhiata da vicino, BRCC32 nel suo lavoro chiama questa particolare libreria e !!! se non trova il componente dichiarato da WinAPI, rifiuterà di compilare. InitCommonControlsEx chiama naturalmente richiesto.



nikkie   (2001-10-29 14:05) [13]

Esegui brcc32 e leggi "Borland Resource Compiler". e dov'è?



Иван Шихалев   (2001-10-29 20:22) [14]

> Jochua

Che tipo di bestia è questo - "Componente dichiarato WinAPI"



kowdle   (2001-10-30 00:07) [15]

Andiamo ... KOL http://bonanzas.rinet.ru/rindex.htm



Jochua   (2001-10-30 06:18) [16]

Bene, se guardi attentamente a ciò che è stato scritto prima, allora c'era una domanda:
Mi piacerebbe usare un listview, non una listbox. Non dirmi quale sia il suo nome in classe.
a cui è stato risposto:
Aprire il file rw32core.dll (questo è in BIN da Delphi) e trovare - SysListView32.
Mi piacerebbe sapere come quelli che sanno troppo saranno in grado di compilare un progetto che usa un componente che non è descritto in questa libreria. Si noti inoltre che l'autore della domanda non è stato coinvolto in questa verbosità per molto tempo, anch'io disconnetto. Risponderò solo all'autore.



nikkie   (2001-10-30 09:40) [17]

> Jochua
ok, disconnetti. solo poche parole in dogonku.

la domanda dell'autore "quale nome di classe" è la risposta logica 2
1. Guardiamo un aiuto (MSDN o Win32 SDK) - vediamo WC_LISTVIEW. lì troviamo un esempio.

2. guarda le chiavi del VCL, vale a dire, commctrl.pas e comctrls.pas. vediamo lì una dichiarazione WC_LISTVIEW e un mucchio di codice curioso, per esempio, un modo sicuro per usare InitCommonControlsEx.

sulla tua risposta "Apri il file rw32core.dll" - è nel blocco note "e, o cosa? E se vedo BorBtn, BorRadio, ... - questo ha a che fare con WinAPI? E se vedo" VasjaPupkin "lì, allora posso creare una finestra di questa classe?

alcune delle tue citazioni che mi hanno fatto innamorare.

"Se crei oggetti tramite WinAPI, allora questa libreria [rw32core.dll] non riesce e tutto è appena dichiarato che Delphi può capire." [con calma passare. e Oxy2 passati da ...]

"Questo file è necessario solo per Delphi, per VC ++ tutte le descrizioni sono in file con estensione" .H "." [l'analogia tra rw32core.dll e sishnymi heders, per usare un eufemismo, non è chiara]

Queste citazioni tradiscono una certa confusione nella tua testa riguardo questo argomento. non vuoi smontarlo - per amore di Dio, solo gli altri non caricano.



_   (2001-10-30 14:49) [18]

> nikkie
Peccato che questi forum siano visitati da questi zoticoni. È un peccato E l'ambizione: non portare.



Oxy2   (2001-11-01 00:04) [19]

Hi!

Grazie a tutti per il consiglio. Ci scusiamo per non aver partecipato. Ho appena una sessione ora - stavo correndo e non ho letto la posta per un paio di giorni.
E non devi giurare a causa mia, altrimenti alla fine incolperò per aver fatto una domanda. E non lo voglio davvero. :-))

Ora al punto. Dalle tue risposte, ho finalmente capito perché questo ListView non è stato creato. Era necessario chiamare la funzione InitCommonControlsEx prima della creazione, ma non l'ho fatto (perché non ne sapevo nulla). Ma ora è tutto a posto e il ListView è stato creato normalmente. È vero, ho un piccolo intoppo con InitCommonControlsEx out. È necessario trasferire alcune strutture a questa funzione. Dovevo capirlo e ho appena usato la funzione InitCommonControls. Funziona tutto bene, ma è comunque interessante ciò che fa la funzione InitCommonControlsEx.
Qualcuno può spiegare in modo intelligente?
E qual è il modo sicuro di usare InitCommonControlsEx?



nikkie   (2001-11-01 09:46) [20]

In realtà tutto è scritto in MSDN.

void InitCommonControls (VOID);
Registra e inizializza le classi della finestra di controllo comune. Questa funzione è obsoleta. Le nuove applicazioni dovrebbero utilizzare la funzione InitCommonControlsEx.

In breve, microsoft dice che dovresti usare InitCommonControlsEx. Inoltre, è più flessibile. La struttura è composta da tutti i campi 2, quindi è facile da usare.

var
ICC: TInitCommonControlsEx;
iniziare
ICC.dwSize: = SizeOf (TInitCommonControlsEx);
ICC.dwICC: =
ICC_LISTVIEW_CLASSES | ICC_TREEVIEW_CLASSES | ICC_TAB_CLASSES;
// enumera le classi che useremo
InitCommonControlsEx (ICC);
fine;

c'è solo una cosa. La versione 4.70 è scritta nella guida su InitCommonControlsEx. Ecco la trascrizione
Piattaforma di distribuzione della versione
4.00 Microsoft® Windows® 95 / Windows NT® 4.0.
4.70 Microsoft® Internet Explorer 3.x.
4.71 Microsoft® Internet Explorer 4.0.
4.72 Microsoft® Internet Explorer 4.01 e Windows® 98.
5.00 Microsoft® Internet Explorer 5.
5.00 Microsoft® Windows® 2000 e Windows Me.
5.80 Microsoft® Internet Explorer 5.
5.81 Microsoft® Windows 2000 e Windows Me.
6.00 Microsoft® Windows XP.

cioè, a condizione che l'utente abbia Win95 senza IE, questa funzione in comctl32.dll non verrà visualizzata. la situazione è difficile immaginabile, ma possibile :).

Ma Dolphi (più precisamente, commctrl.pas) ci aiuta. InitCommonControlsEx viene caricato in modo dinamico, non in modo statico. e come _InitCommonControlsEx e InitCommonControlsEx è solo una funzione pascal
Risultato: = assegnato (_InitCommonControlsEx) e _InitCommonControlsEx (ICC);

Opzione 1. basta usare InitCommonControlsEx
Opzione 2. siamo molto preoccupati per il problema di eseguire il nostro programma su Win95 senza IE e scrivere qualcosa di simile
se (non InitCommonControlsEx (ICC)) quindi InitCommonControls;
Opzione 3. non ci prendiamo in giro e usiamo InitCommonControls. sebbene sia obsoleto, ma 100%, MS non lo eliminerà nelle prossime versioni.



Pagine: 1 tutto il ramo

Forum: "WinAPI";
Archivio attuale: 2002.01.08;
Scarica: [xml.tar.bz2];

al piano di sopra









Memoria: 0.92 MB
Ora: 0.048 c
14-22401
wHammer
2001-11-09 12:56
2002.01.08
E 'stato interessante?


1-22071
KAA
2001-12-19 10:48
2002.01.08
Due servizi interferiscono l'uno con l'altro.


14-22334
Alex_A
2001-11-03 12:14
2002.01.08
GRAFICA !!!!!!!!! IMPORTANTE !!!!!!!!!!!!!!!!! AIUTO !!!!!!!!!!!!!!!!


6-22281
Verona
2001-10-04 12:22
2002.01.08
Invio di messaggi per e-mail


1-22055
walker_ag
2001-12-19 03:27
2002.01.08
Come fare questo?





afrikaans albanese Arabic armeno Azero basco bielorusso Bulgarian catalano Cinese (semplificato) Cinese (tradizionale) croato Ceco danese Dutch Inglese estone filippina Finnish Francese
galiziano georgiano Tedesco greco Creolo haitiano ebraico hindi ungherese islandese Indonesian irlandese Italiano Giapponese Korean lettone lituano macedone Malay maltese Norwegian
persiano polacco Portoghese rumeno Russian serbo Slovak sloveno Spagnolo swahili Swedish Thai turco ucraino Urdu vietnamita gallese yiddish bengalese bosniaco
Cebuano esperanto Gujarati Hausa Hmong Igbo giavanese kannada khmer lao latino maori marathi mongolo nepali punjabi somalo tamil telugu Yoruba
zulù
Английский Francese tedesco italiano portoghese russo spagnolo