AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview mit Objecten

Ein Thema von svenjko · begonnen am 9. Okt 2004 · letzter Beitrag vom 11. Okt 2004
Antwort Antwort
svenjko

Registriert seit: 9. Okt 2004
Ort: WIEN
6 Beiträge
 
Delphi 7 Personal
 
#1

Listview mit Objecten

  Alt 9. Okt 2004, 22:42
Ich brauche für meine Studienarbeit eine TListView die in den Spalten u. Zeilen Objecte enthält (Buttons, Progressbar, usw.); So wie bei "Berg GridView 2.6" ! Das dumme ist nur ich muss das selber bauen. Dieses Thema wurde hier schon oft aber immer ungenügend behandelt.
Mit "MyButton[i].Parent := Listview1;" usw. ist kein Auslangen gefunden. Die Objecte werden beim
Repaint vom ListView überschrieben und beim scrollen nicht bewegt. Vielleicht hat ja doch mal einer ne gute Idee?
Danke ! Svenja
  Mit Zitat antworten Zitat
Benutzerbild von Manne
Manne

Registriert seit: 8. Okt 2003
Ort: Hirrlingen
82 Beiträge
 
Delphi 7 Personal
 
#2

Re: Listview mit Objecten

  Alt 9. Okt 2004, 23:46
du musst sie einfach im OnCustomDraw neu zeichnen lassen.

z.B.
Delphi-Quellcode:
Procedure TForm1.JvListView1CustomDraw(Sender: TCustomListView;
  const ARect: TRect; var DefaultDraw: Boolean);
var _i:integer;
for _i := 0 to High(mySterne) do
 begin
  mySterne[_i].Left := JvListView1.Column[0].Width;
  mySterne[_i].Width := JvListView1.Column[1].Width;
  mySterne[_i].Top := JvListView1.Items.Item[_i].Top +3;
 end;
end;
So 6 wie wir 5 gibt es keine 4 andere, denn wir 3 sind die 2 1sten
  Mit Zitat antworten Zitat
svenjko

Registriert seit: 9. Okt 2004
Ort: WIEN
6 Beiträge
 
Delphi 7 Personal
 
#3

Re: Listview mit Objecten

  Alt 10. Okt 2004, 10:05
Hi !
Danke für den Tip!
Das scrollen funktioniert ja schon ! Leider werden die Objecte beim Scrollen über den Rand des ListView's hinausgeschoben und das Ändern der Column.Width wird nicht in Echtzeit durchgeführt.

Svenja

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    ListView1: TListView;
    procedure ListView1CustomDraw(Sender: TCustomListView;
      const ARect: TRect; var DefaultDraw: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    procedure MyButtonClick(Sender : TObject);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
var
  MyButton : array of TButton;

procedure TForm1.MyButtonClick(Sender : TObject);
var
  s : string;
begin
  s := ListView1.Items[(Sender as TButton).Tag].Caption;
  ShowMessage(s);
end;


procedure TForm1.ListView1CustomDraw(Sender: TCustomListView;
  const ARect: TRect; var DefaultDraw: Boolean);
var
  i : Integer;
begin
  setlength(MyButton, Listview1.Items.Count);
  for i := 0 to Listview1.Items.Count - 1 do
  begin
    MyButton[i].Parent := Listview1;
    MyButton[i].Left := ListView1.Column[0].Width;
    MyButton[i].Top := ListView1.Items.Item[i].Top +3;
    MyButton[i].Height := 12;
    MyButton[i].Width := ListView1.Column[1].Width;
    MyButton[i].Tag := i;
    MyButton[i].Caption := ListView1.Items[i].Caption;
    MyButton[i].OnClick := MyButtonClick;
  end;
end;

procedure TForm1.FormCreate(Sender : TObject);
var
  i : Integer;
begin
  setlength(MyButton, Listview1.Items.Count);
  for i := 0 to ListView1.Items.Count - 1 do
  begin
    MyButton[i] := TButton.Create(ListView1);
    MyButton[i].Parent := Listview1;
  end;
end;

end.
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#4

Re: Listview mit Objecten

  Alt 11. Okt 2004, 09:22
Denkanstösse:
Du könntest entweder "Paint" oder "WndProc" überschreiben und dann eine eigene Paint-Methode basteln, in der Du auch abfängst, ob das ClientRect des Listviews Koordinatenmäßig verlassen wird - dann evtl. eine Region nehmen, um den Zeichenbereich auf das ListView zu begrenzen - viel Erfolg!
Gruß
Tim Leuschner
Programmierer = moderner Sysiphos: stets wenn er meint, den Stein seiner Dummheit auf den Berg des Wissens gewuchtet zu haben, erblickt er einen völlig neuen Aspekt und der Dummfels poltert mit Getöse zurück ins Tal der Unwissenheit...
  Mit Zitat antworten Zitat
svenjko

Registriert seit: 9. Okt 2004
Ort: WIEN
6 Beiträge
 
Delphi 7 Personal
 
#5

Re: Listview mit Objecten

  Alt 11. Okt 2004, 19:25
Hi! Danke für den Tip!
Das Problem mit dem Überscrollen hab ich bereits auf einfache Art gelöst. Ich blende die Objecte beim Scrollen aus und wieder ein.

...if ListView1.Items.Item[i].Top < 20 then MyButton[i].Visible:= False
else MyButton[i].Visible:= True;

Am ändern der Column.Width in Echtzeit kämpfe ich noch.
Werde es jetzt mal mit deinem Tip probieren.

Danke Svenja !

PS: Wie ändert man in einem ListView die Column Höhe ohne den Font zu verändern ?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz