poniedziałek, 31 grudnia 2007

Delphi: Wczytanie i zapis pliku do/z zmiennej typu string

Jak wczytać plik do stringa ?
function LoadFile(const FileName: TFileName): string;
begin
with TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) do
begin
try
SetLength(Result, Size);
Read(Pointer(Result)^, Size);
except
Result := ''; // Deallocates memory
Free;
raise;
end;
Free;
end;
end;


Jak zapisać stringa do pliku ?
procedure SaveFile(const FileName: TFileName; const content: string);
begin
with TFileStream.Create(FileName, fmCreate) do
try
Write(Pointer(content)^, Length(content));
finally
Free;
end;
end;

Delphi: ENTER zamiast TAB

Klawisz Enter będzie się zachowywał jak TAB.
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
SelectNext(Sender as TWinControl,False,True)
else
SelectNext(Sender as TWinControl,True,True);
Key := #0
end;
end;

i to samo ale w DBGrid
procedure TForm1.DBGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 Then
begin
if HiWord(GetKeyState(VK_SHIFT)) <> 0 then
begin
with (Sender as TDBGrid) do
if selectedindex > 0 then
selectedindex := selectedindex - 1
else
begin
DataSource.DataSet.Prior;
selectedindex := fieldcount - 1;
end;
end
else
begin
with (Sender as TDBGrid) do
if selectedindex < (fieldcount - 1) then
selectedindex := selectedindex + 1
else
begin
DataSource.DataSet.Next;
selectedindex := 0;
end;
end;
Key := #0
end;
end;

Problem z instalacją karty dźwiękowej

Komputer wykrywa kartę, ale nie daje się poprawnie zainstalować sterowników, ani oryginalnych z płyty, ani najnowszych z internetu. Po dość długim śledztwie okazało się, że w systemie brakuje w Urządzeniach systemowych brakuje czegoś takiego: Aplikacja zbierająca informacje o oprogramowaniu urządzeń Plug and Play.
Sterownika tego nie da się jednak tak po prostu doinstalować. Żeby to zrobić trzeba skopiować plik machine.inf z WINDOWS\Inf i usunąć z niego linię 20 zawierającą ExcludeFromSelect=*.
Teraz klikamy Dodaj nowy sprzęt, wybieramy zmodyfikowany machine.inf i instalujemy Aplikacja zbierająca informacje o oprogramowaniu urządzeń Plug and Play. Pozostałe potrzebne pliki (swenum.sys, streamci.dll) powinny być już na dysku w odpowiednich miejscach, a jak ich brakuje to trzeba je rozpakować z instalki.

niedziela, 30 grudnia 2007

Odczytanie nazwy komputera w Delphi

Funkcja zwraca jako string nazwę komputera w sieci.
function GetComputerNameStr: string;
var
buffer: array[0..255] of char;
size: dword;
begin
size := Length(buffer);
if GetComputerName(buffer, size) then
Result := buffer
else
Result := ''
end;

piątek, 28 grudnia 2007

Polskie znaki w Delphi

Wpisanie poniższego pliku do rejestru, spowoduje, że w edytorze w Delphi będzie można normalnie pisać polskie znaki

REGEDIT4

[HKEY_CURRENT_USER\Software\Borland\Delphi\7.0\Editor\Options]
"NoCtrlAltKeys"="1"

Ten wpis dotyczy wersji 7.0 ale wystarczy zmienić nr wersji powyżej, aby zadziałało z innymi wersjami.

czwartek, 27 grudnia 2007

Wiersz poleceń w menu kontekstowm

Utwórz plik o nazwie np. cmdhere.reg, z poniższą zawartością:

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Command Prompt Here]
@="Command &Prompt Here"

[HKEY_CLASSES_ROOT\Directory\shell\Command Prompt Here\command]
@="cmd.exe /k cd %1 "


Następnie zapisz zmiany i uruchom.

Jak wyciągnąć maskę z pliku PNG

Potrzebny będzie program ImageMagick. Po instalacji program obsługuje się z linii poleceń.

1. Wyciąganie maski z PNG

convert alphaLayerPng.png -channel matte -separate +channel -negate png8:mask.png

2. Wyciąganie samej grafiki bez maski

convert alphaLayerPng.png +matte image.png


Źródło: GIFBUILDER

Windows XP - udostępnianie i puste hasła

W windows xp nie można domyślnie korzystać z udostępnionych zasobów innego komputera, jeśli uprawniony do dostępu użytkownik nie utworzył hasła do konta. W sieci domowej chciałbym jednak mieć możliwość dostępu do dysków w komputerach bez potrzeby zakładania haseł. Żeby to zrobić trzeba nieco zmniejszyć poziom zabezpieczeń i pozwolić na korzystanie z pustych haseł. A więc do dzieła:

1. Panel sterowania -> Narzędzia administracyjne -> Zasady zabezpieczeń lokalnych
2. Rozwijamy: Ustawienia zabezpieczeń -> Zasady lokalne -> Opcje zabezpieczeń
3. Na liście po prawej szukamy zasady: Konta: ogranicz używanie pustych haseł przez konta lokalne tylko do logowania do konsoli
4. Zmieniamy Ustawienie zabezpieczeń dla tej wartości na Wyłączony

Zamykamy okno i cieszymy się dostępem do dysków bez hasła.

Instalacja Microsoft Jet 3.51

Potrzebowałem w systemie sterownik Microsoft Jet OLEDB 3.51, ponieważ tylko on poprawnie współpracował z jednym ze sterowników ODBC. Tymczasem obecnie króluje wersja 4.0. Po pierwsze potrzebny jest plik mdac_typ_20. Można go pobrać z tej strony MDAC, Jet Support for Windows OS. Nie można go jednak zainstalować ponieważ wykrywa w systemie nowszą wersję. Trzeba to zrobić ręcznie:

1. Rozpakować mdac_typ_20.exe (np. Total Commanderem)
2. Skopiować msjtor32.dll do "C:\Program Files\Common Files\System\Ole DB\"
3. Skopiować do system32 pliki:
Msjet35.dll
Msjter35.dll
Msjint35.dll
Vbajet32.dll
Expsrv.dll

4. Zarejestrować msjet35.dll i msjtor35.dll (polecenie regsvr32.exe)

Więcej szczegółów tutaj

Zmiana systemu plików z ext2 na ext3

Zmiana systemu plików z ext2 na ext3 jest bezbolesna, warto to zrobić bo korzyści są duże. Dobrze jest mieć pod ręką bootowalny CD lub USB, aby w razie problemów mieć z czego uruchomić komputer. W tym przykładzie korzystam z urządzenia /dev/sda1, ale to tylko przykład. Przed zmianą trzeba sprawdzić czy w jądrze jest obsługa partycji ext3 za pomocą komendy

cat /proc/filesystems

jeżeli na liście jest ext3 to w porządku jeżeli go nie ma to trzeba przekompilować jądro (jeżeli zmiana systemu nie dotyczy partycji root to wystarczy skompilować obsługę ext3 jako moduł)

1. Dodajemy journal do urządzenia

tune2fs -j /dev/sda1

2. Możemy teraz zmienić ustawienia dot. częstotliwości sprawdzania dysku

tune2fs -i 0 -c 0 /dev/sda1

3. Ostatni krok to zmiana wpisów w pliku /etc/fstab trzeba zmienić dla wybranego urządzenia wpis z ext2 na ext3.

I to wszystko. Po restarcie systemu partycja zostanie zamontowana jako ext3.
Kroki 1 i 2 można połączyć i wykonać jedną komendę tune2fs.