Lukas FAQ jest rozprowadzane na ogólnych zasadach licencji typu freeware. Zastrzegam sobie wyłączne prawo do modyfikacji tego dokumentu. Jeśli "pożyczasz" FAQ ma ono pozostać w nie zmienionej formie (dozwolone są jedynie poprawki "kosmetyczne"), podpisane moim imieniem i nazwiskiem (Łukasz "Lukas" Wyporek), adresem strony (http://www.lukas-home-page.ovh.org/), i e-mailem (lukas.home.page@gmail.com). Jeśli spełnisz te warunki to nie widzę problemu. Było by miło abyś napisał przed tym do mnie i podał stronę na której ów FAQ będzie się znajdować (ale nie jest to konieczne) (napisz do mnie).
maskaX : array[0..2,0..2] of integer = (-1,0,1,
-2,0,2,
-1,0,1);
Oczywiście jest to niepoprawny przykład próby zainicjowania tablicy dwuwymiarowej, podając tylko jeden wymiar i to jeszcze przekraczający zadeklarowaną wielkość.
procedure TFrAbout.animuj(tekst: string);
var
Bitmapa: TBitmap;
x,x2,y : integer;
txtmod : string;
begin
AnimujRun := True;
Bitmapa := TBitmap.Create;
Bitmapa.Canvas.Font.Size := 14;
Bitmapa.Canvas.Font.Name := 'Courier New';
txtmod := tekst + ' ' + tekst + ' ' + tekst;
Bitmapa.Width := Bitmapa.Canvas.TextWidth(txtmod)+2;
Bitmapa.Height := Bitmapa.Canvas.TextHeight(txtmod);
Bitmapa.Canvas.FillRect(Rect(0,0,Bitmapa.Canvas.TextWidth(txtmod)+2,Bitmapa.Canvas.TextHeight(txtmod)));
Bitmapa.Canvas.Brush.Color := clRed;
x := Image1.Width;
y := 0;
Repeat
Application.ProcessMessages;
Sleep(10);
Bitmapa.Canvas.Brush.Style := bsClear;
Bitmapa.Canvas.Font.Color := clRed;
Bitmapa.Canvas.TextOut(1,1,txtmod);
Bitmapa.Canvas.Brush.Style := bsClear;
Bitmapa.Canvas.Font.Color := clGray;
Bitmapa.Canvas.TextOut(0,0,txtmod);
Image1.Canvas.Draw(x,y,Bitmapa);
Dec(x);
until (x = -3*Image1.Canvas.TextWidth(txtmod)) or (MainForm.Done);
Bitmapa.Free;
AnimujRun := False;
end;
Nazwa_tablicy : array of real override;
W sekcji pomiędzy begin i end;
SetLength(Nazwa_tablicy, High(nazwa_tablicy)+5);
var
handle : HWND;
begin
handle := Windows.WindowFromPoint(Point(20,150));
SendMessage(handle,WM_CLOSE,0,0);
Dzięki temu zamkniesz każdy element (włącznie z pulpitem) znajdujący się w danym punkcie.
// Jak w trakcie pracy programu stworzyć komponent?
// Do zmiennych globalnych dodaj (słówko var przed sekcją implementation)
var Button : TButton;
// W jakiejś procedurze piszesz teraz:
Button := TButton.Create( Self );
Button.Parent := Self;
Button.Left := 50;
Button.Top := 50;
Button.Caption := 'Przycisk' ;
Button.OnClick := ButtonClick;
// Aby obsłużyć zdarzenia, należy utworzyć procedurę ( w sekcji private ):
private
procedure ButtonClick(Sender : TObject);
end;
// W Implementation:
procedure TForm1.ButtonClick(Sender : TObject);
begin
ShowMessage('Nacisnąłęś przycisk '+ TButton(Sender).Name );
end;
For z := Length(liczba)-1 Downto 0 Do
Begin
If liczba[z+1] = 'A' Then
buff := buff + (10 * Power(16,x))
else
If liczba[z+1] = 'B' Then
buff := buff + (11 * Power(16,x))
else
If liczba[z+1] = 'C' Then
buff := buff + (12 * Power(16,x))
else
If liczba[z+1] = 'D' Then
buff := buff + (13 * Power(16,x))
else
If liczba[z+1] = 'E' Then
buff := buff + (14 * Power(16,x))
else
If liczba[z+1] = 'F' Then
buff := buff + (15 * Power(16,x))
else
buff := buff + StrToInt(liczba[z+1]) * Power(16,x);
Inc(x);
end;
Result := FloatToStr(buff);
For z := Length(zakres)-1 Downto 0 Do
Begin
buff := buff + StrToInt(zakres[z+1]) * Power(2,x);
Inc(x);
end;
Result := FloatToStr(buff);
if Length(TEdit(Sender).Text) = TEdit(Sender).MaxLength Then
fmMainForm.ActiveControl := fmMainForm.FindNextControl(TEdit(Sender), True, True, True);
| Akcja | Parametr | Opis parametru |
|---|---|---|
| Podgląd w małym okienku | /p | Parametr jest uchwytem okna, w którym mamy wyświetlić podgląd naszego wygaszacza. |
| Podgląd na pełnym ekranie | /s | Gdy Windows chce wyświetlić wygaszacz standardowo (na pełnym ekranie), uruchamia nasz wygaszacz z tym parametrem. |
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
i:=0;
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall',False);
Reg.GetKeyNames(ListBox1.Items);
Reg.CloseKey;
For i:=0 To ListBox1.Items.Count-1 Do
Begin
Application.ProcessMessages;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ListBox1.Items.Strings[i],False);
If Reg.ValueExists('QuietDisplayName') Then
Begin
ListBox1.Items.Strings[i]:=Reg.ReadString('QuietDisplayName');
Reg.CloseKey;
end;
If Reg.ValueExists('DisplayName') Then
Begin
ListBox1.Items.Strings[i]:=Reg.ReadString('DisplayName');
Reg.CloseKey;
end;
end;
end;
Następnie klikamy dwukrotnie na listę (ListBox1) i uzupełniamy procedurę następująco:
procedure TForm1.ListBox1Click(Sender: TObject);
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ListBox1.Items.Strings[ListBox1.ItemIndex],False);
If Reg.ValueExists('QuietUninstallString') Then
Begin
Label1.caption:=Reg.ReadString('QuietUninstallString');
Reg.CloseKey;
end;
If Reg.ValueExists('UninstallString') Then
Begin
Label1.caption:=Reg.ReadString('UninstallString');
Reg.CloseKey;
end;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+ListBox1.Items.Strings[ListBox1.ItemIndex],False);
If (not Reg.ValueExists('QuietUninstallString')) and (not Reg.ValueExists('UninstallString')) Then
Label1.Caption:='<Brak uninstalatora!>';
Reg.CloseKey;
end;
To wszystko! Po kliknięciu na Button1 program załaduje nam listę zainstalowanych w systemie aplikacji. Ścieżkę do deinstalatora danej aplikacji możemy uzyskać poprzez kliknięcie na jej pozycję w ListBox (ścieżka wyświetli się w komponencie Label).
type
TForm1 = class(TForm)
Button1: TButt...
Dodajemy do niej deklarację naszego zbioru w następujący sposób:
type
SetLitery = set of 'A'..'M';
TForm1 = class(TForm)
Button1: TButt...
Następnie na formularzu umieszczamy przycisk i klikamy nań dwukrotnie. Pojawia się edytor kodu z nowowygenerowaną procedurą obsługi zdarzenia, w którym wpisujemy:
If ('B' in Litery) Then
ShowMessage('Litera B należy do zbioru!');
To wszystko! Całość powinna prezentować się następująco:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
SetLitery = set of 'A'..'M';
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Litery: SetLitery;
begin
If ('B' in Litery) Then
ShowMessage('Litera B należy do zbioru!');
end;
end.
varumieszczamy sekcję
constw której deklarujemy naszą stałą.
const
// Deklaracja naszej stałej
stala : string = 'To jest tekst przypisany do stałej';
Przechodzimy do widoku formularza (np. wciskając F12) i umieszczamy na nim przycisk. Klikamy na przycisk dwukrotnie - otwiera nam się edytor kodu czekający na wpisanie kodu dla procedury obsługi zdarzenia. Uzupełniamy procedurę następująco:
procedure TForm1.Button1Click(Sender: TObject);
type
// Deklarujemy nowy typ wskaźnikowy (jest to typ wskazujący na jakiś łańcuch znaków)
TStringPointer = ^string;
var
// Deklarujemy naszą zmienną o typie TStringPointer,
// czyli deklarujemy zmienną o typie wskaźnikowym,
// wskazującą na jakiś łańcuch w pamięci
Zmienna : TStringPointer;
begin
// Wyświetlamy zawartość stałej
ShowMessage(stala);
// Do naszej zmiennej wskaźnikowej, przypisujemy adres naszej stałej,
// czyli po prostu wskazujemy na wartość stałej (podłączamy się pod nią)
Zmienna := @stala;
// Zmieniamy wartość pod adresem na który wskazuje nasza Zmienna
Zmienna^ := 'Haha!!! Udało mi się zmienić wartość stałej!';
// Wyświetlamy zawartość stałej
ShowMessage(stala);
end;
To wszystko! Właśnie udało się nam zmienić wartość stałej, czyli krótko mówiąc, nasza stała... stała się zmienną ;P
procedure TForm1.Panel1Click(Sender: TObject);
var
r,g,b :byte;
hexR, hexG, hexB : string;
begin
// Otworzenia okna ColorDialog1
If not ColorDialog1.Execute Then
Exit;
// Pobranie koloru wybranego w oknie ColorDialog
Panel1.Color := ColorDialog1.Color;
// Pobieramy składowe koloru
r := GetRValue(ColorDialog1.Color);
g := GetGValue(ColorDialog1.Color);
b := GetBValue(ColorDialog1.Color);
// Tutaj następuje konwersja do systemu heksadecymalnego
hexR := Format('%x',[r]);
hexG := Format('%x',[g]);
hexB := Format('%x',[b]);
// Drobne poprawki wyświetlania
If hexR = '0' Then
hexR:='00';
If hexG = '0' Then
hexG:='00';
If hexB = '0' Then
hexB:='00';
// Wyświetlenie koloru w postaci heksadecymalnej
Label1.Caption := hexR+hexG+hexB;
end;
var
ppp,x,y : integer;
begin
x := 14;
y := 4;
ppp := x - (x div y) * y; // = x mod y
ShowMessage(IntToStr(ppp));
W okienku wyświetli się wynik operacji x mod y. Operacja x mod y to nic innego jak wykonanie działania x - (x div y) * y
procedure TForm1.Button1Click(Sender: TObject);
var
rec : TSearchRec;
found : integer;
DirList : TStringList;
posDir : integer; // pozycja na liście katalogów
FileList : TStringList;
begin
DirList := TStringList.Create;
FileList := TStringList.Create;
DirList.Add('C:\'); // Od jakiego katalogu ma zacząć
posDir := 0;
{ Funkcja zwraca 0 kiedy nie wystąpi w niej
błąd (gdy wystapi błąd np. nie ma już żadnego
pliku do znalezienia (wszystkie zostały już
znalezione) to funkcja zwraca wartość różna
od zera)}
Repeat
found := FindFirst(DirList[posDir]+'*.*',faDirectory,rec);
While found = 0 Do
begin
found := FindNext(rec);
if found = 0 Then
DirList.Add(DirList[posDir]+rec.Name+'\');
ListBox1.Items := DirList;
Application.ProcessMessages;
end;
FindClose(rec);
Inc(posDir);
until posDir >= DirList.Count;
DirList.Free;
FileList.Free;
end;
function RecordingCallback(Handle: HRECORD; buffer: Pointer; length, user: DWord): boolean; stdcall;
var
i : integer;
probka : ^byte;
begin
// Modyfikacja bufora
for i:=0 to length-1 Do
begin
probka := Pointer(Integer(buffer)+i);
// Teraz zmienna probka^ stanowi pojedynczą próbkę którą możemy dowolnie modyfikować
probka^ := probka^ div 2;
end;
// Koniec modyfikacji bufora
// Kopiuje bufor (zmienna buffer) do strumienia zawierającego dźwięk (zmienna WaveStream)
Form1.WaveStream.Write(buffer^, length);
// Allow recording to continue
Result := True;
end;
;$(DELPHI)\Lib\DSPack\src\DirectX9;$(DELPHI)\Lib\DSPack\src\DSPack;
Zamykamy okno, przechodzimy do naszego folderu z paczkami.
procedure TForm1.Button1Click(Sender: TObject);
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('HARDWARE\DESCRIPTION\System\CentralProcessor\0',False);
Memo1.Lines.Add('Nazwa: '+Reg.ReadString('ProcessorNameString'));
Memo1.Lines.Add('Identyfikator: '+Reg.ReadString('Identifier'));
Memo1.Lines.Add('Producent: '+Reg.ReadString('VendorIdentifier'));
Memo1.Lines.Add('Prędkość: '+IntToStr(Reg.ReadInteger('~MHz')));
Reg.Free;
end;
ColorBox1.AddItem('Czarny',TObject($000000));
ColorBox1.AddItem('Biały',TObject($FFFFFF));
ColorBox1.AddItem('Niebieski',TObject($FF0000));
ColorBox1.AddItem('Zielony',TObject($00FF00));
ColorBox1.AddItem('Czerwony',TObject($0000FF));
Przy czym wartość liczbowa musi być typu TObject - jest to liczba 32-bitowa, taka jak TColor i taka jak wszystkie wskaźniki w procesorach i systemach 32-bitowych. Wartości kolorów zapisane są trójkami (BGR - czyli "Blue","Green","Red") w systemie hexadecymalnym. W ten sposób możesz dodać dowolny kolor. Jeśli powyższe jest zbyt skomplikowane, to możesz zamiast heksadecymalnych wartości liczbowych użyć predefiniowanych stałych jak clBlack, clWhite w następujący sposób:
ColorBox1.AddItem('Czarny',TObject(clBlack));
ColorBox1.AddItem('Biały',TObject(clWhite));
ColorBox1.AddItem('Niebieski',TObject(clBlue));
ColorBox1.AddItem('Zielony',TObject(clGreen));
ColorBox1.AddItem('Czerwony',TObject(clRed));
var
bajty : array[0..3] of byte;
i : integer;
begin
for i:=0 To 513 Do
bajty[2] := i;
ShowMessage(IntToStr(bajty[1]));
ShowMessage(IntToStr(bajty[3]));
Plik BMP (monochromatyczny)|*.bmp|Plik BMP (kolorowy)|*.bmp
Kilknij dwukrtonie na przycisk. Delphi powinien wygenerować procedurę zdarzeniową którą uzupełniasz następująco:
var
bmp : TBitmap;
begin
// Tworzymy bitmapę
bmp := TBitmap.Create;
// Ustalamy rozmiar bitmapy
bmp.Width := 640;
bmp.Height := 480;
// Rysujemy elipsę
bmp.Canvas.Ellipse(100,100,150,150);
// Rysujemy bitmapę na formularzu
Form1.Canvas.Draw(0,0,bmp);
// Otwieranie okienka SavePictureDialog
if SavePictureDialog1.Execute Then
begin
// USTALANIE ILOŚCI BITÓW NA PIKSEL (FORMATU KODOWANIA BARW)
// ZALEŻNIE OD WYBRANEJ OPCJI W OKNIE SavePictureDialog
case SavePictureDialog1.FilterIndex of
1 : bmp.PixelFormat := pf1bit; // konwersja do obrazu czarno-białego (monochromatycznego)
2 : bmp.PixelFormat := pf32bit; // konwersja do obrazu kolorowego
end;
// domyslny format to bmp.PixelFormat := pf24bit;
bmp.SaveToFile(SavePictureDialog1.FileName+'.bmp'); // Zapis do pliku
end;
// Zwalnianie pamięci przydzielonej bitmapie
FreeAndNil(bmp);
Powyższy kod wygeneruje obraz przedstawiający małe kółko i zapisze go do pliku, konwertując go uprzednio do odpowiedniej (wybranej w oknie zapisu) ilości kolorów.
Łukasz "Lukas" Wyporek
lukas.home.page@gmail.com