Witam. Mam pytanie do szanownych panów a właściwie kilka. Chciałem napisać program do obsługi diodek tak jak tu: http://wkretak.pl/readarticle.php?article_id=5 . Chciałem wykorzystać winapi poniewarz znalazłem kod gotowy a nie jestem zaawansowanym programistą.Na początku poszukałem w google i znalazłem kilka ciekawych artykułów. Wykorzystałem to w swoim programie. Na razie główna część wygląda następująco:
procedure TLPT.Button1Click(Sender: TObject);
var
hLPT,Uchwyt : THandle; { uchwyt naszegoportu }
ret : dword; { potrzebne na dane 'zwrotne' }
blad:cardinal;
begin
ShowMessage('Start programu, pobranie uchwytu do programu');
hLPT := CreateFile('LPT1', GENERIC_WRITE, 0, nil, OPEN_EXISTING, 0, 0); {pobieramy uchwyt do portu :}
ShowMessage('Sprawdzenie czy nie ma blędów') ;
Uchwyt := hLPT;
if Uchwyt = 0 then
begin
blad := GetLastError;
ShowError(blad, 'Wywołanie funkcji "lpt" nie powiodło się. Przyczyna:') ;
exit;
end ;
ShowMessage('Brak bledów, można kontynlowac') ;
data := 0;
If CheckBox1.Checked then data := data + 1;
If CheckBox2.Checked then data := data + 2;
If CheckBox3.Checked then data := data + 4;
If CheckBox4.Checked then data := data + 8;
If CheckBox5.Checked then data := data + 16;
If CheckBox6.Checked then data := data + 32;
If CheckBox7.Checked then data := data + 64;
If CheckBox8.Checked then data := data + 128;
SpinEdit1.Value:=data;
ShowMessage('Zaraz nastąpi zapis do portu lpt' ) ;
<b>WriteFile(hLPT, data, 1, ret, nil); {tu sie wywala}</b>
ShowMessage('Zapis ukończono!');
SpinEdit1.Value:=data;
end;
procedure ShowError(Error: LongWord; Info: string);
var
lpMsgBuf: PChar;
begin
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER or
FORMAT_MESSAGE_FROM_SYSTEM or
FORMAT_MESSAGE_IGNORE_INSERTS,
nil, Error, LANG_NEUTRAL or (SUBLANG_DEFAULT shl 10),
PChar(@lpMsgBuf), 0, nil );
ShowMessage(Info + #10#13 + string(lpMsgBuf));
LocalFree(Cardinal(lpMsgBuf));
end;
No i niby wszystko się kompiluje i powinno być ok. Ale na początku włączałem program na laptopie gdzie nie ma lpt. Wszystko działało. Ale schody zaczęły się dopiero wtedy jak program przeniosłem na inny komputer z lpt (p2 450mhz 128mgb ram'u winxpsp2) postawiłem na nim ten system tylko do zabawy z lpt (bo wiem że to trochę niebezpieczne )wiec nic innego na nim nie ma oprócz tych dogranych plików do win z tego artykułu u góry no i useport. Dodam też ze zbudowałem sobie układ na diodach i za pomocą dołączonego programu do artykułu na wkretak.pl sprawdziłem i diody się zapalały tak jak chciałem. Niestety mój program nie działa. A dokładnie objawia się to tym że diody się nie świecą a program sie zawiesza. Chciałem sprawdzić gdzie dokładnie więc dodałem te ShowMessage. Jak sie okazało program "wisi" podczas zapisu do portu, ale nie do końca. W desperacji zostawiłem go spokojnie po linijce: ShowMessage('Zaraz nastąpi zapis do portu lpt' ) ;
no i ku mojemu zdziwieniu po kilku minutach! ujrzałem napis ShowMessage('Zapis ukończono!');
niestety żadna z diód sie nie zapaliła. Choć próbowałem kilkanaście razy. Zawsze następuje zawis programu na kilka minut dioda sie nie zapala niestety a napis się wyświetla. Mam więc pytania co robię nie tak, czy ten wykorzystany prze zemnie kod jest prawidłowy jeśli tak czy da się go w jakiś sposób poprawić żeby jednak ta diody sie zapalały. Na swoją obronę chciałem powiedzieć że dopiero zaczynam programować no i po kodzie widać że jednak trochę szukałem w internecie, może za słabo. dziękuje za dotarcie do końca. Pozdrawiam i proszę o pomoc.