Banner Access
Tekst informacyjny o polityce Cookies Close   
BraDefrag wielkość: 77 KB . Status: free

Defragmentacja bieżącej bazy i bazy z danymi za pomocą własnych poleceń menu.

  1. Utworzenie własnego menu i paska narzędzi za pomocą których można uruchomić:
    • Polecenie menu - Defragmentacja i naprawa bieżącej bazy
    • Polecenie menu - Zmiana hasła bieżącej bazy,
    • Defragmentacja zabezpieczonej hasłem bazy Dane.mdb, z której pochodzą tabele dołączone, bez konieczności zamykania bieżącej bazy.
  2. Przed defragmentacją zamykane są wszystkie otwarte obiekty (za wyjątkiem formularza Demo) oraz odłączane wszystkie tabele połączone, więc Access usuwa wszystkie sprzężenia Tabela dołączona - Tabela dołączona oraz Tabela dołączona - Tabela macierzysta.  Sprzężeń tych nie da się ponownie ustanowić za pomocą VBA. W związku z tym sprzężenia w bazie ustanowione są poprzez kwerendy będącymi kopiami tabel dołączanych.
  3. Po zakończeniu defragmentacji wszystkie tabele są ponownie dołączane.
  4. Zaawansowanie procesu wykonywania defragmentacji pokazywane jest przez własny wskaźnik zaawansowania procesu oraz systemowy wskaźnik zaawansowania (tzw. Progressbar)
UWAGA:
  • pliki BraDefrag.mdb i Dane.mdb muszą znajdować się w tym samym katalogu.
  • Pierwotnie BraDefrag miał być bardziej rozbudowany, ale potem zrezygnowałem z komplikowania przykładu, a dołączanie i odłączanie tabel pozostało. Rzeczywiście operacje te nie są potrzebne podczas defragmentacji, ale znajdą zastosowanie w BraLogo.mdb,która porusza zagadnienia pseudozabezpieczeń.
separator
BragressBar wielkość: 101 KB . Status: free

Przedstawienie zaawansowania przebiegu procesu dla pętli For oraz rst.Move przy pomocy własnego wskaźnika postępu, na którym wyświetlane są wartości pętli lub rekordu rekordsetu aktualnie przetwarzanego.

  1. Dla dowolnej pętli For i To Step o dowolnym zakresie i kroku.
  2. Dla dowolnego zakresu For i To Step dla rst.Move dla rekordsetu, parametry ograniczone są ilością rekordów w rekordsecie (Snapshot) lub ilością zwracanych rekordów dla Dynaset z warunkiem WHERE - kierunek i skok dowolny.
  3. Dla wszystkich rekordów ForwardOnly dla rst.MoveNext.

W miarę możliwości postarałem się przechwycić błędy wynikające ze złych parametrów pętli(niewłaściwy zakres pętli lub skok, brak rekordów lub przekroczenia zakresu rekordsetu, jak również niewłaściwego wywoływania wskaźnika.

BragressBar powstał w oparciu o wskaźnik w przykładzie BraDefrag, a bezpośrednim powodem był brak możliwości wyświetlenia systemowego wskaźnika zaawansowania dla dowolnych wartości (ujemnych lub przechodzących przez zero).

W obecnej wersji dokonałem dość znacznych zmian w stosunku do oryginału mając na celu uproszczenie moim zdaniem dość skomplikowanego wywoływania paska postępu.

  1. Zrezygnowałem z trzech metod wywoływania paska postępu na rzecz jednej, (mam nadzieję w miarę uniwersalnej), z formularza głównego.
  2. Nie jest mierzony czas wykonywania poszczególnych operacji.
  3. Parametry pętli i zakres poruszania się po rekordsecie jest określony w kodzie formularza, a nie w tabeli źródłowej.
separator
BraMsgIco wielkość: 72 KB. Status: free

Własna ikona i własne napisy na przyciskach MsgBoax'a 

  1. Wyświetlanie własnej ikony i własnego tytułu na pasku okna Accessa (bez korzystania z opcji Narzędzia/Autostart/Ikona Aplikacji
  2. Wyświetlanie własnej ikony i własnego tytułu na pasku okna MsgBox.
  3. Zmiana standardowych napisów  na przyciskach MsgBox-a takich jak np. Tak, Nie, Anuluj, OK,  na tekst o dowolnej treści.
UWAGA:
  • plik BraMsgIco.mdb i folder Ikony muszą znajdować się w tym samym katalogu.
  • Jest to modyfikacja przykładu BraMsgIcoX.mdb. W obecnej wersji został usunięty z przykładu kod odpowiedzialny za dezaktywację przycisku X na pasku okna formularza, dezaktywację menu systemowego formularzy i okna formularza. Kod ten umieściłem w przykładowej bazie BraXAltF4 wraz z dezaktywacją przycisku X okna Accessa oraz dezaktywacją poleceń menu Plik/Zamknij i Plik/Zakończ w celu uniemożliwienia zamknięcia formularza i bazy przez nieuprawnionego użytkownika.

BraInsertMacro wielkość: 27 KB . Status: free

Dopisuje makro do innego na dowolnej pozycji w/m Akcji makra.

  1. Pokazuje listę wszystkich makr w bazie.
  2. Pokazuje nazwy wszystkich Akcji wybranego makra.
  3. Dopisuje wybrane makro nad wybraną pozycją Akcja makra docelowego.
separator
BraFullScreenAcc wielkość: 35 KB. Status: free

Zmiana rozmiaru i stylu okna Accessa.

  1. Ukrywa pasek tytułowy okna Accessa.
  2. Ukrywa pasek zadań (SysTray) i wyświetla okno Accessa na cały ekran.
  3. Ukrywa wszystkie ikony (zakładki) uruchomionych programów na pasku zadań.
separator
BraCboClick wielkość: 21 KB. Status: free

Jak rozpoznać, czy kliknięto strzałkę formantu ComboBox.

Problem ten pojawił się na grupie dyskusyjnej pl.comp.bazy-danych.msaccess w wątku Mariusza Sankowskiego, dotyczącego bardzo fajnego przykładu kalendarzyka DateTimePicker.
Kalendarzyk miał być pokazywany na formularzu po stwierdzeniu, że strzałka formantu ComboBox została kliknięta przez użytkownika.

separator
BraIcoToModule wielkość: 59 KB. Status: free

Ikona Aplikacji zapisana na stałe w module.

  1. Zapis pliku graficznego *.ico lub *.bmp w postaci tablicy typu string. Każdy element tablicy zawiera 300 bajtów pliku w postaci stringu, co daje 900 znaków w linii.
    Limit znaków w linii modułu wynosi 1024 znaków.
  2. Po zapisaniu pliku do modułu basImg, przenosimy moduły: basImg i basStart do innej bazy i mamy nieznikającą i niemodyfikowalną własną ikonę aplikacji.
  3. Przy starcie możemy sprawdzić, czy bajty naszej ikony są zgodne z plikiem graficznym na dysku, (aby zapobiec podmianie ikony przez Użytkownika).
    W tym przypadku sprawdzanych jest pierwszych 100 bajtów pliku.
  4. Metoda ta przeznaczona jest do niewielkich plików - najlepiej *.ico lub *.bmp o wielkości 16x16 lub 32x32 piksele.
  5. Przy zbyt dużych rozmiarach pliku graficznego przekroczony zostanie limit wielkości modułu. Dla 24-bitowj bitmapy dość dobrze zapisywana była bitmapa 64x128 pikseli. Problemy pojawiały się przy 24-bitowej bitmapie 158x158 - w module było 251 linijek po 900 znaków. Dla *.bmp 160x160 następował Err = 6 "Przepełnienie".
    Co prawda można tworzyć drugi moduł i kolejne, tylko po co ???
    Access i tak i tak wyświetli ikonę na pasku tytułowym wielkości 16x16 pikseli.
  6. Przykład ten zostanie wykorzystany w BraAbout... do wyświetlenia własnej ikony w systemowym oknie dialogowym 'ABOUT'.
separator
BraAbout ... wielkość: 57 KB. Status: free

;-)) Wykorzystanie systemowego okna dialogowego 'ABOUT' ;-))

  1. W trakcie ładowania formularza z modułu "basIcons" zapisywana jest do katalogu TMP wspólna ikona okna Accessa i formularza. Ikony zostały zapisane w module "basIkons" metodą opisaną w przykładzie: BraIcoToModule.
  2. Po kliknięciu przycisku  "O programie ..." - dzięki funkcji:
    LockWindowUpdate(GetDesktopWindow) blokowane jest odświeżanie okien.
    Do katalogu TMP zapisywana jest następna ikona o wymiarach 64x64, której uchwyt pobieramy za pomocą LoadImage(...). Po uruchomieniu Timera przekazujemy uchwyt ikony do funkcji ShellAbout (.....) wyświetlającej systemowe okno dialogowe 'ABOUT'.
  3. W Sub Form_Timer() pobierany jest uchwyt otwartego okna dialogowego, ustawiany jest tekst okien dzieci, następnie okno jest centrowane w/m okna Accessa, a na pasku tytułowym wyświetlana jest mała ikona zgodna z ikoną Aplikacji.
  4. Na końcu następuje odblokowanie odświeżania: i mamy widoczne "nasze" okno dialogowe.
separator
BraPIDToHwnd wielkość: 14 KB. Status: free

Synchroniczny Shell. Uchwyt okna programu uruchomionego funkcją Shell. Identyfikator procesu (PID)

  1. Funkcja Shell(sAppPath, vbNormalFocus) uruchamia program sAppPath w sposób asynchroniczny i zwraca identyfikator procesu (PID).
  2. Pobieramy kolejno uchwyty okien będących dziećmi DesktopWindow i sprawdzamy dla każdego z nich funkcją GetWindowThreadProcessId(hNext, lProcID) identyfikator procesu i porównujemy z PID-em zwróconym przez uruchomiony Shell.
  3. Jeżeli identyfikatory są równe to hNext jest uchwytem okna uruchomionego przez nasz programu.
  4. Prowizoryczna synchronizacja Shell'a - Access czeka w pętli:
    Do
    lIsWind = IsWindow(hNext)
    DoEvents
    Loop Until lIsWind = 0

    aż uchwyt hNext przestanie wskazywać na okno (okno zostało zamknięte).
  5. Więcej szczegółów o synchronizacji Shell'a z zastosowaniem funkcji API:
    WaitForSingleObject znajduje się w przykładzie poniżej BraShellSynchro
separator
BraShellSynchro wielkość: 18 KB. Status: free

Synchroniczny Shell. Uruchomienie pliku *.bat lub polecenia CommandLine w oknie MSDOS-Windows. Identyfikator procesu (PID)

  1. Funkcja Shell(Environ$("COMSPEC") & sClose & sCmdLine, lWindowStyle) uruchamia program sCmdLine (lub linię polecenia) w sposób asynchroniczny i zwraca identyfikator procesu (PID).
    • Jeżeli sClose = " /c " to lWindowStyle = vbHide i program Dosowy jest uruchomiony w sposób niewidoczny dla użytkownika i jest samoczynnie zamykany po zakończeniu się.
    • Jeżeli sClose = " /k " to lWindowStyle = vbNormalFocus i program Dosowy jest widoczny i czeka na zamknięcie przez użytkownika.
  2. Po uzyskaniu uchwytu procesu:
    hProc = OpenProcess(SYNCHRONIZE, True, PID)
  3. funkcja WaitForSingleObject(hProc, INFINITE) czeka aż proces się zakończy
  4. lub WaitForSingleObject(hProc, 50) czeka w pętli:
    Do
    lRetWait = WaitForSingleObject(hProc, 50)
    DoEvents
    Loop Until lRetWait = 0

    na zakończenie się procesu.
  5. Przykładowo zademonstrowano synchroniczny Shell dla programu Notepad.exe.
separator
BraMsgProgBar wielkość: 21 KB. Status: free

Zaawansowanie procesu w oknie MsgBox. Prymitywny wskaźnik postępu

  1. Wykorzystanie okna MsgBox'a jako prymitywnego wskaźnika postępu.
    Jako 100% zaawansowania procesu przyjęto rozmiar pola tekstowego zawierającego 100 spacji
    MsgBox cTextStaic & vbNewLine & Space$(100), vbExclamation
  2. Zmiana wielkości (szerokości) wbudowanego wskaźnika zaawansowania procesu:
    SysCmd acSysCmdInitMeter, "Proces trwa ...", 300
separator
BraHiLoByte wielkość: 26 KB. Status: free

HiWord, LoWord, HiByte i LoByte z liczby Long.

  1. Metoda opisana w MSDN, z poprawkami przedstawionymi przez Krzysztofa Naworytę na grupie comp.bazy-danych.msaccess w wątku: HiWord LoWord
  2. Metoda z wykorzystaniem funkcji API CopyMemory poprzez bezpośrednie skopiowanie czterech bajtów liczby Long:
    • dla HiLoWord do tablicy typu Integer (0 To 1)
    • dla HiLoByte  do tablicy typu Byte    (0 To 3)
  3. Dodatkowo przedstawiono test szybkości obu metod.
separator
BraFormatA wielkość: 25 KB. Status: free

Synchroniczne formatowanie dyskietki.

  1. Funkcja Shell(Environ$("COMSPEC") & " /c " & sCmdLine, vbHide) uruchamia
    polecenie Format A: w oknie MSDOS-Windows i zwraca identyfikator procesu (PID),
    który przekazywany jest do zbSynchroProc, gdzie:
  2. Po uzyskaniu uchwytu procesu:
    • hProc = OpenProcess(SYNCHRONIZE, True, PID)
    • funkcja WaitForSingleObject(hProc, INFINITE) czeka aż proces się zakończy.
  3. Formatowanie odbywa się w sposób niewidoczny dla użytkownika.