quickrepin preview ekranı üzerinde değişiklik yapmak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

quickrepin preview ekranı üzerinde değişiklik yapmak

Mesaj gönderen nitro »

merhabalar
quickreportun preview ekranında değişiklik yapmak istiyorum, alt tarafa statusbar gibi bişey koyup kısayol tuşları atamak istiyorum.
mesela "F11 yazdır ve önizlemeyi kapat" gibi.
mümkün müdür?
şimdiden teşekkürler.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Dosya olarak gönderemiyorum.

Mesaj gönderen sabanakman »

Dosya olarak göndermek daha şık olurdu ama bu şekilde idare et!.

Baştan savma böyle bir çalışmam olmuştu (Baştan savma dediysem aslında daha işlevsel ama ekran görüntüsü üzerinde hiç çalışmadığım için biraz uğraşacaksın :) ).
----------------------------------------------
form_onizleme.dfm dosyası

Kod: Tümünü seç

object FormOnizleme: TFormOnizleme
  Left = 192
  Top = 108
  Width = 696
  Height = 480
  HorzScrollBar.Tracking = True
  VertScrollBar.Tracking = True
  Caption = 'FormOnizleme'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnClose = FormClose
  OnCreate = FormCreate
  OnDestroy = FormDestroy
  OnMouseWheel = FormMouseWheel
  OnResize = FormResize
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13
  object Durum: TStatusBar
    Left = 0
    Top = 434
    Width = 688
    Height = 19
    Panels = <
      item
        Width = 50
      end
      item
        Width = 50
      end>
    SimplePanel = False
  end
  object Panel: TPanel
    Left = 0
    Top = 0
    Width = 688
    Height = 105
    Align = alTop
    TabOrder = 1
    object btnYukseklik: TBitBtn
      Left = 8
      Top = 8
      Width = 75
      Height = 25
      Action = Yukseklik
      Caption = 'Yükseklik'
      TabOrder = 0
    end
    object btnNormal: TBitBtn
      Left = 88
      Top = 8
      Width = 75
      Height = 25
      Action = Normal
      Caption = 'Normal'
      TabOrder = 1
    end
    object btnGenislik: TBitBtn
      Left = 168
      Top = 8
      Width = 75
      Height = 25
      Action = Genislik
      Caption = 'Genişlik'
      TabOrder = 2
    end
    object btnilk: TBitBtn
      Left = 296
      Top = 8
      Width = 75
      Height = 25
      Action = ilk
      Caption = 'İlk'
      TabOrder = 3
    end
    object btnOnceki: TBitBtn
      Left = 376
      Top = 8
      Width = 75
      Height = 25
      Action = Onceki
      Caption = 'Önceki'
      TabOrder = 4
    end
    object btnSonraki: TBitBtn
      Left = 456
      Top = 8
      Width = 75
      Height = 25
      Action = Sonraki
      Caption = 'Sonraki'
      TabOrder = 5
    end
    object btnSon: TBitBtn
      Left = 536
      Top = 8
      Width = 75
      Height = 25
      Action = Son
      Caption = 'Son'
      TabOrder = 6
    end
    object btnAyarla: TBitBtn
      Left = 24
      Top = 72
      Width = 75
      Height = 25
      Action = Ayarla
      Caption = 'Ayarla'
      TabOrder = 7
    end
    object btnYazdir: TBitBtn
      Left = 104
      Top = 72
      Width = 75
      Height = 25
      Action = Yazdir
      Caption = 'Yazdir'
      TabOrder = 8
    end
    object btnKapat: TBitBtn
      Left = 480
      Top = 56
      Width = 75
      Height = 25
      Action = Kapat
      Caption = 'Kapat'
      TabOrder = 9
    end
    object btnKaydet: TBitBtn
      Left = 248
      Top = 56
      Width = 75
      Height = 25
      Action = Kaydet
      Caption = 'Kaydet'
      TabOrder = 10
    end
    object btnAc: TBitBtn
      Left = 328
      Top = 56
      Width = 75
      Height = 25
      Action = Ac
      Caption = 'Aç'
      TabOrder = 11
    end
    object SayfaNo: TSpinEdit
      Left = 576
      Top = 56
      Width = 65
      Height = 22
      MaxValue = 0
      MinValue = 0
      TabOrder = 12
      Value = 0
      OnKeyUp = SayfaNoKeyUp
    end
    object btnSayfayaGit: TBitBtn
      Left = 648
      Top = 56
      Width = 33
      Height = 25
      Caption = 'Git'
      TabOrder = 13
      OnClick = btnSayfayaGitClick
    end
    object Olcek: TSpinEdit
      Left = 40
      Top = 40
      Width = 65
      Height = 22
      MaxValue = 0
      MinValue = 0
      TabOrder = 14
      Value = 0
      OnKeyUp = OlcekKeyUp
    end
    object btnOlcek: TBitBtn
      Left = 111
      Top = 40
      Width = 33
      Height = 25
      Caption = 'Ölçkle'
      TabOrder = 15
      OnClick = btnOlcekClick
    end
  end
  object QROnizle: TQRPreview
    Left = 0
    Top = 105
    Width = 688
    Height = 329
    HorzScrollBar.Tracking = True
    VertScrollBar.Tracking = True
    Align = alClient
    TabOrder = 2
    OnPageAvailable = QROnizlePageAvailable
    OnProgressUpdate = QROnizleProgressUpdate
    PageNumber = 1
    Zoom = 100
  end
  object Olaylar: TActionList
    Left = 248
    Top = 192
    object Yukseklik: TAction
      Caption = 'Yükseklik'
      OnExecute = YukseklikExecute
    end
    object Normal: TAction
      Caption = 'Normal'
      OnExecute = NormalExecute
    end
    object Genislik: TAction
      Caption = 'Genişlik'
      OnExecute = GenislikExecute
    end
    object ilk: TAction
      Caption = 'İlk'
      OnExecute = ilkExecute
    end
    object Onceki: TAction
      Caption = 'Önceki'
      OnExecute = OncekiExecute
    end
    object Sonraki: TAction
      Caption = 'Sonraki'
      OnExecute = SonrakiExecute
    end
    object Son: TAction
      Caption = 'Son'
      OnExecute = SonExecute
    end
    object Ayarla: TAction
      Caption = 'Ayarla'
      OnExecute = AyarlaExecute
    end
    object Yazdir: TAction
      Caption = 'Yazdir'
      OnExecute = YazdirExecute
    end
    object Kaydet: TAction
      Caption = 'Kaydet'
      OnExecute = KaydetExecute
    end
    object Ac: TAction
      Caption = 'Aç'
      OnExecute = AcExecute
    end
    object Kapat: TAction
      Caption = 'Kapat'
      OnExecute = KapatExecute
    end
  end
end
----------------------------------------------
form_onizleme.pas dosyası

Kod: Tümünü seç

unit form_onizleme;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, ExtCtrls, QRPrntr, QuickRpt, QR3const, StdCtrls, Buttons,
  ActnList, Spin;

type
  TFormOnizleme = class(TForm)
    Durum: TStatusBar;
    Panel: TPanel;
    btnYukseklik: TBitBtn;
    btnNormal: TBitBtn;
    btnGenislik: TBitBtn;
    btnilk: TBitBtn;
    btnOnceki: TBitBtn;
    btnSonraki: TBitBtn;
    btnSon: TBitBtn;
    btnAyarla: TBitBtn;
    btnYazdir: TBitBtn;
    btnKapat: TBitBtn;
    QROnizle: TQRPreview;
    btnKaydet: TBitBtn;
    btnAc: TBitBtn;
    Olaylar: TActionList;
    Yukseklik: TAction;
    Normal: TAction;
    Genislik: TAction;
    ilk: TAction;
    Onceki: TAction;
    Sonraki: TAction;
    Son: TAction;
    Ayarla: TAction;
    Yazdir: TAction;
    Kaydet: TAction;
    Ac: TAction;
    Kapat: TAction;
    SayfaNo: TSpinEdit;
    btnSayfayaGit: TBitBtn;
    Olcek: TSpinEdit;
    btnOlcek: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormResize(Sender: TObject);
    procedure QROnizleProgressUpdate(Sender: TObject; Progress: Integer);
    procedure QROnizlePageAvailable(Sender: TObject; PageNum: Integer);
    procedure YukseklikExecute(Sender: TObject);
    procedure NormalExecute(Sender: TObject);
    procedure GenislikExecute(Sender: TObject);
    procedure ilkExecute(Sender: TObject);
    procedure OncekiExecute(Sender: TObject);
    procedure SonrakiExecute(Sender: TObject);
    procedure SonExecute(Sender: TObject);
    procedure AyarlaExecute(Sender: TObject);
    procedure YazdirExecute(Sender: TObject);
    procedure KaydetExecute(Sender: TObject);
    procedure AcExecute(Sender: TObject);
    procedure KapatExecute(Sender: TObject);
    procedure SayfaNoKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure btnSayfayaGitClick(Sender: TObject);
    procedure btnOlcekClick(Sender: TObject);
    procedure OlcekKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormMouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
  private
    { Private declarations }
    LastProgress : Integer;
    procedure RaporPreview(Sender: TObject);
    procedure RaporPreviewModal(Sender: TObject);
  public
    { Public declarations }
    procedure UpdateInfo;
  end;

var
  FormOnizleme: TFormOnizleme;
  FormOlustu:Boolean=False;

type TBicim=(bNormal,bModal);

function Onizle(const Rapor:TCustomQuickRep;const Bicim:TBicim=bModal):Boolean;

implementation

{$R *.DFM}

function Onizle(const Rapor:TCustomQuickRep;const Bicim:TBicim=bModal):Boolean;
var YedOlay:TNotifyEvent;
begin
  YedOlay:=Rapor.OnPreview;
  try
    Result:=True;
    if not FormOlustu then FormOnizleme:=TFormOnizleme.Create(Application);
    with FormOnizleme do begin
      if Rapor.ReportTitle<>'' then Rapor.ReportTitle:=Rapor.Name;
      Caption:=Format('Önizleme Formu (%s)',[Rapor.ReportTitle]);
      case Bicim of
        bNormal:begin Rapor.OnPreview:=RaporPreview;Rapor.Preview;end;
      else
        Rapor.OnPreview:=RaporPreviewModal;Rapor.PreviewModal;
      end;
    end;
  except
    Result:=False;
  end;
  Rapor.OnPreview:=YedOlay;
end;

procedure TFormOnizleme.FormCreate(Sender: TObject);
begin
  FormOlustu:=True;  
  LastProgress := 0;
end;

procedure TFormOnizleme.FormDestroy(Sender: TObject);
begin
  FormOlustu:=False;
end;

procedure TFormOnizleme.RaporPreview(Sender: TObject);
begin
  QROnizle.QRPrinter := TQRPrinter(Sender);
  Show;
end;

procedure TFormOnizleme.RaporPreviewModal(Sender: TObject);
begin
  QROnizle.QRPrinter := TQRPrinter(Sender);
  ShowModal;
end;

procedure TFormOnizleme.FormShow(Sender: TObject);
begin
  ShowWindow(Handle,SW_SHOWMAXIMIZED);
  UpdateInfo;
end;

procedure TFormOnizleme.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  QROnizle.QRPrinter.ClosePreview(Self);
  Action:=caFree;
end;

procedure TFormOnizleme.FormResize(Sender: TObject);
begin
  QROnizle.UpdateZoom;
end;

procedure TFormOnizleme.QROnizleProgressUpdate(Sender: TObject;
  Progress: Integer);
begin
  if Progress > LastProgress  then
  begin
    Durum.Panels[0].Text := IntToStr(Progress)+'%';
    LastProgress := Progress;
  end;
//  Gauge.Position := Progress;
  if (Progress = 0) or (Progress = 100) then Durum.Panels[0].Text := 'Tamam';
end;

procedure TFormOnizleme.UpdateInfo;
var ilkSayfa,SonSayfa:Boolean;
begin
  ilkSayfa:=QROnizle.PageNumber=1;
  SonSayfa:=QROnizle.PageNumber=QROnizle.QRPrinter.PageCount;
  ilk.Enabled:=not ilkSayfa;Onceki.Enabled:=ilk.Enabled;
  Son.Enabled:=not SonSayfa;Sonraki.Enabled:=Son.Enabled;
  SayfaNo.Value:=QROnizle.PageNumber;
  Olcek.Value:=QROnizle.Zoom;
  Durum.Panels[1].Text :='Sayfa ' + IntToStr(QROnizle.PageNumber) + ' ' +
    '/' + IntToStr(QROnizle.QRPrinter.PageCount);
end;

procedure TFormOnizleme.QROnizlePageAvailable(Sender: TObject;
  PageNum: Integer);
begin              
  UpdateInfo;
  SayfaNo.Enabled:=QROnizle.QRPrinter.PageCount>1;
  btnSayfayaGit.Enabled:=SayfaNo.Enabled;
  SayfaNo.MinValue:=1;SayfaNo.MaxValue:=QROnizle.QRPrinter.PageCount;
  SayfaNo.Value:=QROnizle.PageNumber;
end;

procedure TFormOnizleme.YukseklikExecute(Sender: TObject);
begin
  Application.ProcessMessages;
  QROnizle.ZoomToFit;
  UpdateInfo;
end;

procedure TFormOnizleme.NormalExecute(Sender: TObject);
begin
  Application.ProcessMessages;
  QROnizle.Zoom := 100;
  UpdateInfo;
end;

procedure TFormOnizleme.GenislikExecute(Sender: TObject);
begin
  Application.ProcessMessages;
  QROnizle.ZoomToWidth;
  UpdateInfo;
end;

procedure TFormOnizleme.ilkExecute(Sender: TObject);
begin
  QROnizle.PageNumber := 1;
  UpdateInfo;
end;

procedure TFormOnizleme.OncekiExecute(Sender: TObject);
begin
  QROnizle.PageNumber := QROnizle.PageNumber - 1;
  UpdateInfo;
end;

procedure TFormOnizleme.SonrakiExecute(Sender: TObject);
begin
  QROnizle.PageNumber := QROnizle.PageNumber + 1;
  UpdateInfo;
end;

procedure TFormOnizleme.SonExecute(Sender: TObject);
begin
  QROnizle.PageNumber := QROnizle.QRPrinter.PageCount;
  UpdateInfo;
end;

procedure TFormOnizleme.AyarlaExecute(Sender: TObject);
begin
  QROnizle.QRPrinter.PrintSetup;
end;

procedure TFormOnizleme.YazdirExecute(Sender: TObject);
begin
  QROnizle.QRPrinter.Print;
end;

procedure TFormOnizleme.KaydetExecute(Sender: TObject);
var
  aExportFilter : TQRExportFilter;
{$ifndef win32}
  FileExt : string;
  I : integer;
{$endif}
begin
  aExportFilter := nil;
  with TSaveDialog.Create(Application) do
  try
    Title := 'Raporu Kaydet';
    Filter := QRExportFilterLibrary.SaveDialogFilterString;
    DefaultExt := cQRPDefaultExt;
    if Execute then
    begin
    {$ifdef win32}
      if FilterIndex = 1 then
        QROnizle.QRPrinter.Save(Filename)
      else
      begin
        try
          aExportFilter := TQRExportFilterLibraryEntry(
            QRExportFilterLibrary.Filters[FilterIndex - 2]).ExportFilterClass.Create(Filename);
          QROnizle.QRPrinter.ExportToFilter(aExportFilter);
        finally
          aExportFilter.Free
        end
      end
    {$else}
      FileExt := ExtractFileExt(Filename);
      if copy(FileExt, 1, 1) = '.' then delete(FileExt, 1, 1);
      if (FileExt = '') or (FileExt = cQRPDefaultExt) then
        QROnizle.QRPrinter.Save(Filename)
      else
      begin
        for I := 0 to QRExportFilterLibrary.Filters.Count - 1 do
        begin
          if TQRExportFilterLibraryEntry(QRExportFilterLibrary.Filters[I]).Extension = FileExt then
          try
            aExportFilter := TQRExportFilterLibraryEntry(
            QRExportFilterLibrary.Filters[I]).ExportFilterClass.Create(Filename);
            QROnizle.QRPrinter.ExportToFilter(aExportFilter);
          finally
            aExportFilter.Free;
          end;
        end;
      end;
    {$endif}
    end;
  finally
    Free;
  end;
end;

procedure TFormOnizleme.AcExecute(Sender: TObject);
begin
  with TOpenDialog.Create(Application) do
  try
    Title := 'Rapor Yükle';
    Filter := 'Rapor Dosyası' + ' (*.' +cQRPDefaultExt + ')|*.' + cqrpDefaultExt;
    if Execute then
      if FileExists(FileName) then
      begin
        QROnizle.QRPrinter.Load(Filename);
        QROnizle.PageNumber := 1;
        QROnizle.PreviewImage.PageNumber := 1;
        UpdateInfo;
        Ayarla.Enabled := False;
      end
      else
        ShowMessage(SqrFileNotExist);
  finally
    free;
  end;
end;

procedure TFormOnizleme.KapatExecute(Sender: TObject);
begin
  Close;
end;

procedure TFormOnizleme.SayfaNoKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN:btnSayfayaGit.Click;
  end;
end;

procedure TFormOnizleme.btnSayfayaGitClick(Sender: TObject);
begin
  QROnizle.PageNumber:=SayfaNo.Value;
  UpdateInfo;
end;

procedure TFormOnizleme.btnOlcekClick(Sender: TObject);
begin
  QROnizle.Zoom:=Olcek.Value;
end;

procedure TFormOnizleme.OlcekKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  case Key of
    VK_RETURN:btnOlcek.Click;
  end;
end;

procedure TFormOnizleme.FormMouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  QROnizle.VertScrollBar.Position:=QROnizle.VertScrollBar.Position-WheelDelta;
end;

end.
----------------------------------------------
bu pencerede kullanabilmek için önizleme kodlarını "QuickRep1.Preview;" şeklinde değil de "Onizle(QuickRep1);" şeklinde kullanmalısın!.. Kolay gelsin.
En son sabanakman tarafından 13 Ağu 2007 08:48 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Qr nin kendi preview nesnesini boş bir forma koyup oradan istediğin gibi bir ön izleme formu tasarlasan daha şık olur bence.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Zaten yukarıda da bu şekilde yapıldı.
---------
.
.
object QROnizle: TQRPreview
Left = 0
.
.
--------
dfm dosyasında mevcut. Başka türlüsü nasıl yapılır bilemiyorum. Aklıma gelen tek yöntem bu bileşenin aynısından yazmak.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

teşekkürler arkadaşlar, ben bi deneyeyim bunları.
Cevapla