Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pozivanje ProgressBar-a iz Unit-a

[es] :: Pascal / Delphi / Kylix :: Pozivanje ProgressBar-a iz Unit-a

[ Pregleda: 1005 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mdax
Dalibor Markovic
Srbija, Kraljevo

Član broj: 14211
Poruke: 152
*.dynamic.sbb.rs.



+17 Profil

icon Pozivanje ProgressBar-a iz Unit-a27.12.2017. u 19:39 - pre 33 meseci
Kako može da se izvede sledeće: (koristim Delphi Tokyo)

Imam formu frmMain, frmSplash i unit uConfig.
Pri pokretanju programa prvo se prikazuje frmSplash.
frmSplah poziva uConfig unit (proceduru ReadConfig) koji dalje vrši proveru programa i koja treba da na formu u frmSplash treba da poveća vrednost na ProgressBar-u.


=========================================================================================
Code:

program Test1;

uses
  System.SysUtils,
  Vcl.Forms,
  uMain in 'uMain.pas' {frmMain},
  uSplash in 'uSplash.pas' {frmSplash},
  uConfig in 'uConfig.pas';

{$R *.res}

var
  frmSplash: TfrmSplash;

begin
   System.ReportMemoryLeaksOnShutdown := True;

  Application.Initialize;
  Application.MainFormOnTaskbar := True;

  // ----------------------------------------------------------------------------
  // Kreiranje frmSplash forme i njeno pozivanje
  // ----------------------------------------------------------------------------
  frmSplash := TfrmSplash.Create(nil);
  try
    frmSplash.ShowModal;
  finally
    frmSplash.Free;
  end;

  Application.CreateForm(TfrmMain, frmMain);
  Application.Run;

end.

=========================================================================================
unit uConfig;

interface

procedure ReadConfig;

implementation
uses sysutils, uSplash;

procedure ReadConfig;
begin
  if FileExists('Baza.sdb')  then //Provera da li postoji Baza.sdb baza
  begin
        uSplash.frmSplash.prgBar.StepIt;
  end
end;

=========================================================================================

unit uSplash;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
    System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Imaging.pngimage,
    Vcl.ExtCtrls,
  Vcl.StdCtrls, AdvReflectionLabel, FormSize, Vcl.ComCtrls, inifiles;

type
  TfrmSplash = class(TForm)
    pnl1: TPanel;
    pnl2: TPanel;
    img1: TImage;
    advrflctnlbl1: TAdvReflectionLabel;
    tmrSplashShow: TTimer;
    tmrSplashHide: TTimer;
    prgBar: TProgressBar;
    btn1: TButton;
    procedure tmrSplashShowTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tmrSplashHideTimer(Sender: TObject);
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
end;

var
  frmSplash: TfrmSplash;

implementation
uses uConfig;

{$R *.dfm}

// Postavljamo vrednosti tmrSplashShow i tmrSplashHide objekta
procedure TfrmSplash.btn1Click(Sender: TObject);
begin
        ReadConfig;
end;

procedure TfrmSplash.FormCreate(Sender: TObject);
begin
  tmrSplashShow.Enabled := True;
  tmrSplashShow.Interval := 10;
  tmrSplashHide.Enabled := False;
  tmrSplashHide.Interval := 10;
end;

// Pri zatvaranju forme koristi FadeOut efekat
procedure TfrmSplash.tmrSplashHideTimer(Sender: TObject);
begin
  if AlphaBlendValue <= 10 then
  begin
    tmrSplashShow.Enabled := False;
    AlphaBlendValue := 0;
    Self.Close;
  end
  else
    AlphaBlendValue := AlphaBlendValue - 5;
end;

// Pri prikazu forme koristi FadeIn efekat
procedure TfrmSplash.tmrSplashShowTimer(Sender: TObject);
begin
  if AlphaBlendValue >= 250 then
  begin
    tmrSplashShow.Enabled := False;
    AlphaBlendValue := 255;

    //ReadConfig;  // Učitavanje konfiguracije programa (UNIT uConfig)

    //tmrSplashHide.Enabled := True;
  end
  else
    AlphaBlendValue := AlphaBlendValue + 5;
end;
end.

end.


Pri pokretanju programa javlja mi grešku:
Access violation at address XXXX in module 'XXXX.exe'
Read of address 000003E8.


[Ovu poruku je menjao savkic dana 27.12.2017. u 22:40 GMT+1]
 
Odgovor na temu

mdax
Dalibor Markovic
Srbija, Kraljevo

Član broj: 14211
Poruke: 152
*.dynamic.sbb.rs.



+17 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a27.12.2017. u 19:49 - pre 33 meseci
Da još dodam da u sličnom primeru sve funkcioniše kako treba:

Kako može da se izvede sledeće: (koristim Delphi Tokyo)

Imam formu frmMain, frmSplash i unit uConfig.
Pri pokretanju programa prvo se prikazuje frmSplash.
frmSplah poziva uConfig unit (proceduru ReadConfig) koji dalje vrši proveru programa i koja treba da na formu u frmSplash treba da poveća vrednost na ProgressBar-u.


=========================================================================================
Code:

program Project1;

uses
  Vcl.Forms,
  Unit1 in 'F:\Test2\Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas';

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.


=========================================================================================

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    btn1: TButton;
    lbl1: TLabel;
    Panel1: TPanel;
    prgBar: TProgressBar;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses Unit2;

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
begin
        Check;
end;

end.
=========================================================================================

unit Unit2;

interface
  procedure check;


implementation
uses Unit1;

procedure check;
begin
        Unit1.Form1.lbl1.Caption := 'Radi';
        Unit1.Form1.prgBar.StepIt;

end;

end.



[Ovu poruku je menjao savkic dana 27.12.2017. u 22:40 GMT+1]
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2638



+69 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a27.12.2017. u 21:46 - pre 33 meseci
> Pri pokretanju programa javlja mi grešku: Access violation at address XXXX in module 'XXXX.exe' Read of address 000003E8.

Gde tacno puca (koji red)? AV greske skoro sigurno znace da pristupas objektu/memoriji koji ne postoji (jos nije napravljen ili je unisten).


 
Odgovor na temu

mdax
Dalibor Markovic
Srbija, Kraljevo

Član broj: 14211
Poruke: 152
*.dynamic.sbb.rs.



+17 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a27.12.2017. u 21:56 - pre 33 meseci
Access violation at address 005FDE0E in module 'Project1.exe' Read of address 000003E8

greška se javlja u uConfig kod sledećeg

procedure ReadConfig;

begin

if FileExists('Baza.sdb') then //Provera da li postoji Baza.sdb baza
begin
uSplash.frmSplash.prgBar.StepIt; //<<<------------- OVDE NASTAJE GREŠKA
end

end;

Postavio sam i izvorni kod.
Prikačeni fajlovi
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2638



+69 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a27.12.2017. u 23:25 - pre 33 meseci
> uSplash.frmSplash.prgBar.StepIt; //<<<------------- OVDE NASTAJE GREŠKA

uSplash.frmSplash ti je nil zato sto si redefinisao frmSplash varijablu u dpr fajlu (a vec postoji u uSplash), obrisi deklaraciju iz dpra i radice.

 
Odgovor na temu

mdax
Dalibor Markovic
Srbija, Kraljevo

Član broj: 14211
Poruke: 152
*.dynamic.sbb.rs.



+17 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a28.12.2017. u 00:28 - pre 33 meseci
Savkic Ako ikada prolaziš kroz Kraljevo obavezno mi se javi na PM, imaš brate piće od mene.
Ubio sam se tražeći problem i goooooooooglao ali ništa.
Ipak iskustvo čini svoje, a ja sam nov u ovome.

Hvala puno!
 
Odgovor na temu

savkic
Igor Savkić

Moderator
Član broj: 92186
Poruke: 2638



+69 Profil

icon Re: Pozivanje ProgressBar-a iz Unit-a28.12.2017. u 08:51 - pre 33 meseci
Svi smo kroz to prosli, vremenom ces to sam resavati.
Verovatno nisi do sad koristio, tvoj najveci prijatelj u Delphiju je debugger i sam VCL tj. Delphi source, stavis breakpoint u kodu sa F5, startujes program i onda kroz debugger pratis promenljive i izvrsavas program red po red.

 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Pozivanje ProgressBar-a iz Unit-a

[ Pregleda: 1005 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.