Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Trackergeeignete Tabellenkomponente (https://www.delphipraxis.net/167875-trackergeeignete-tabellenkomponente.html)

Magic94 23. Apr 2012 15:22

Trackergeeignete Tabellenkomponente
 
Hallo,

ich suche Komponenten welche das Stringgrid ablösen. Würde gerne einen Tracker in Delphi schreiben, aber dafür muss eine gescheite Tabellenkomponente her. Die Felder müssen nur eine weitere Funktion haben: Es muss etwas blau markiert werden können (Per Code, wie z.B. : ListBox1.ItemIndex := 1;)

Zur Orientierung wie ich mir die Komponente vorstelle: OpenModPlugTracker

Medium 23. Apr 2012 15:38

AW: Trackergeeignete Tabellenkomponente
 
Der Link wird abgefangen ;)

Als einfache Lösung böten sich hier ggf. Listboxen an, die man synchron scrollt. Was stört dich beim StringGrid eigentlich?

Magic94 23. Apr 2012 17:57

AW: Trackergeeignete Tabellenkomponente
 
Zitat:

Zitat von Medium (Beitrag 1163205)
Als einfache Lösung böten sich hier ggf. Listboxen an, die man synchron scrollt.

Bei 16 Kanälen wären das dann 16 ListBoxen mit 16 Scrollbars .. Uaaah :D

Zitat:

Zitat von Medium (Beitrag 1163205)
Was stört dich beim StringGrid eigentlich?

Das man nicht per Code eine Zeile blau markieren kann ;-) (sowas wie Itemindex bei den ListBoxen)

Medium 23. Apr 2012 18:01

AW: Trackergeeignete Tabellenkomponente
 
Ich hab grad kein Delphi hier zur Hand, aber kennt die nicht auch ein OnCustomDrawCell oder OnDrawCell?

Bummi 23. Apr 2012 18:06

AW: Trackergeeignete Tabellenkomponente
 
jepp, und wenn man faul ist kann man ja auch Rowselect aktivieren

Namenloser 23. Apr 2012 19:49

AW: Trackergeeignete Tabellenkomponente
 
Da die Anforderungen an eine Tracker-Tabelle ja doch recht spezifisch aber gleichzeitig sehr beschränkt sind, würde ich das einfach schnell selber programmieren... geht wahrscheinlich schneller als eine passende Komponente zu finden.

Medium 23. Apr 2012 23:24

AW: Trackergeeignete Tabellenkomponente
 
Würde ich tendenziell auch so angehen, und nichtmals darüber nachdenken etwas fertiges so anzupassen (weil es in aller Regel länger dauert als Eigenbau wenn es etwas "neben" dem vorgesehenen Einsatzzweck liegt). Wenn man das Vorhaben insgesamt betrachtet, dürfte das für den TE auch eher eine Sache von nem Manntag sein, ggf. 2-4 ums rund zu machen.

Lemmy 24. Apr 2012 05:56

AW: Trackergeeignete Tabellenkomponente
 
Guten Morgen,

VirtualStringTree, damit sollte das relativ schnell machbar sein

Grüße

Iwo Asnet 24. Apr 2012 10:28

AW: Trackergeeignete Tabellenkomponente
 
Delphi-Quellcode:
unit Unit12;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Grids;

type
  TForm12 = class(TForm)
    StringGrid1: TStringGrid;
    Timer1: TTimer;
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormResize(Sender: TObject);
  end;

var
  Form12: TForm12;

implementation

uses
  Math;

{$R *.dfm}

procedure TForm12.FormCreate(Sender: TObject);
begin
  FormResize(Self);
end;

procedure TForm12.FormResize(Sender: TObject);
begin
  StringGrid1.RowCount := StringGrid1.Height div StringGrid1.DefaultRowHeight;
end;

procedure TForm12.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  targetGrid: TStringGrid;

begin
  targetGrid := Sender as TStringGrid;

  if StrToIntDef(targetGrid.Cells[aCol, aRow], 100) > 100 then
    targetGrid.Canvas.Brush.Color := clRed
  else
    targetGrid.Canvas.Brush.Color := clWhite;

  targetGrid.Canvas.FillRect(rect);
  targetGrid.Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, targetGrid.Cells[ACol, ARow]);
end;

procedure TForm12.Timer1Timer(Sender: TObject);
var
  i,j: Integer;

begin
  for i := StringGrid1.RowCount - 1 downto 2 do
     for j := 0 to StringGrid1.ColCount - 1 do
         StringGrid1.Cells[j,i] := StringGrid1.Cells[j,i-1];

// Neue Werte simulieren
  for I := 0 to StringGrid1.ColCount - 1 do
    StringGrid1.Cells[i, 1] := IntToStr(Random(130));
end;

end.

Bummi 24. Apr 2012 12:06

AW: Trackergeeignete Tabellenkomponente
 
@Iwo Asnet

ein Drawgrid mit Liste würde ich dem Umkopieren bevorzugen.

Magic94 24. Apr 2012 15:16

AW: Trackergeeignete Tabellenkomponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab jetzt schon was mit dem StringGrid gebastelt ;-)
sieht recht vernünftig aus find ich:
(bisher tuts nur wirklich "Play".. der Rest ist noch mitten in der Mache und sollte nicht viel bringen ausser ein paar Fehler)

Magic94 24. Apr 2012 22:22

AW: Trackergeeignete Tabellenkomponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe ein weiteres Problem bei der DrawCell Methode. Der Text wird unsichtbar beim "markieren" / blau drübermalen.
http://tenac.webhop.net/images/stringgrids.jpg

Medium 24. Apr 2012 23:13

AW: Trackergeeignete Tabellenkomponente
 
Du musst den Text selbst nochmals neu zeichnen nachdem dein FillRect()/Rect() unterwegs war, da das das natürlich übermalt hat. Die On*Draw*-Events treten i.A. nach* Zeichnen durch den Default-Handler (bzw. "Drawer") auf - d.h. du bist der letzte der malt bevor es auf den Bildschirm geht.

*) Manche Grids unterlassen den Standard-Handler ganz, ob das TStringGrid das auch tut weiss ich grad nicht.

himitsu 25. Apr 2012 00:09

AW: Trackergeeignete Tabellenkomponente
 
Zitat:

Zitat von Medium (Beitrag 1163427)
*) Manche Grids unterlassen den Standard-Handler ganz, ob das TStringGrid das auch tut weiss ich grad nicht.

es gibt 2-3 Vorgehensweisen

- die Standardausgabe kommt vor dem OnDrawEvent und man würde alles übermalen
- es gibt entweder die Standardausgabe oder das OnDrawEvent
- die Standardausgabe kommt nach dem Event (und läßt sich teilweise/ganz abschalten) ... hier kann man z.B. die BrushColor oder PenColor ändern (da diese vor dem Event gesetzt wurden) und der Standardhandler würde dann mit den geänderten Farben arbeiten

Der TCustomGrid/TDrawGrid/TStringGrid arbeitet so:
1: Font setzen (wenn DefaultDrawing=True)
2: Hintergrund zeichnen (wenn DefaultDrawing=True)
3: Text zeichnen (im TStringGrid und wenn DefaultDrawing=True)
4: OnDrawCell
5: FocusRect zeichnen (wenn DefaultDrawing=True)

Magic94 28. Apr 2012 00:34

AW: Trackergeeignete Tabellenkomponente
 
Zitat:

Zitat von Medium (Beitrag 1163427)
Du musst den Text selbst nochmals neu zeichnen nachdem dein FillRect()/Rect() unterwegs war, da das das natürlich übermalt hat. Die On*Draw*-Events treten i.A. nach* Zeichnen durch den Default-Handler (bzw. "Drawer") auf - d.h. du bist der letzte der malt bevor es auf den Bildschirm geht.

*) Manche Grids unterlassen den Standard-Handler ganz, ob das TStringGrid das auch tut weiss ich grad nicht.

Das habe ich auch verstanden das es übermalt wird^^, mich interessiert viel eher WIE ich das neu zeichne, da ich sowas noch nie gemacht habe.

himitsu 28. Apr 2012 01:49

AW: Trackergeeignete Tabellenkomponente
 
Delphi-Referenz durchsuchenTCanvas.TextOut ?

Und vergiß nicht den State auszuwerten, denn darin siehst du, was du noch zeichnen mußt, wie z.B. die blaue Selection und Dergleichen.

Magic94 28. Apr 2012 03:17

AW: Trackergeeignete Tabellenkomponente
 
Zitat:

Zitat von himitsu (Beitrag 1163963)
Delphi-Referenz durchsuchenTCanvas.TextOut ?

Und vergiß nicht den State auszuwerten, denn darin siehst du, was du noch zeichnen mußt, wie z.B. die blaue Selection und Dergleichen.

nee das ist total ekelig, das muss auch einfacher gehen. Da ist man ja ewig nur die Koordinaten am ausrechnen. Ausserdem bekomm ich schon bei einer Zahl die ich aktualisiere ein elendes Flackerkonzert. Es müssen aber 32 gleichzeitig (bzw in direkter Abfolge) neu gezeichnet werden

himitsu 28. Apr 2012 12:11

AW: Trackergeeignete Tabellenkomponente
 
All zu viel ausrechnen muß man nicht, denn das übernimmt Delphi für einen.
Über den Parameter Rect bekommt man die Position der Zelle sehr praktisch geliefert.

Und nein, TextOut, TextRect und Co. ist der korrekte Weg ... Delphi mach intern auch nichts Anderes, als mit Delphi-Referenz durchsuchenTCanvas.TextRect den Text dort reinzuschreiben.

Falls das doppelte Zeichnen stört, dann kann man es mit Delphi-Referenz durchsuchenDoubleBuffered versuchen
oder man schaltet das Zeichnen vom Delphi ab (Delphi-Referenz durchsuchenTCustomGrid.TDefaultDrawing=False), aber dabei muß man dann natürlich alle Zellen selber zeichnen.


Und z.B. über Hier im Forum suchenStringGrid1DrawCell TextOut lassen sich einige Beispiele finden.

Magic94 28. Apr 2012 12:45

AW: Trackergeeignete Tabellenkomponente
 
danke danke danke :)

Das mit Doublebuffered hab ich schon probiert, da ich aber das XPMan in dem Programm verwende zeichnen sich ekelige ränder um Buttons, oder verschwinden einfach ganz. Das geht also schonmal nicht :(

EDIT 1: DefaultDrawing auf False, Rect benutzt und schon klappt alles wie gewünscht :)
EDIT 2: Naja nicht ganz.
Zitat:

Pattern.Canvas.TextOut(Rect.Left+1,Rect.Top,Patter n.Cells[1,trackerpos]);
macht jetzt folgendes:
http://tenac.webhop.net/images/problem.jpg

himitsu 28. Apr 2012 12:50

AW: Trackergeeignete Tabellenkomponente
 
DoubleBuffered hat halt einige Probleme, vorallem bei transparenten Komponenten.
Das Prinzip hinter DoubleBuffered ist ein OffScreenBitmap, in welches die Komponente gezeichnet und was dann auf einmal auf dem Bildschirm ausgegeben wird.
Und da die Bitmaps standardmäßig erstmal einen schwarzen Hintergund haben, wird dann alles Transparentes natürlich auch schwart, da dieses Bitmap keine Transparenz kennt.
Außerdem kann es bremsend wirken und bei RDP-Verbindungen ist sowas auch eher hinderlich.

Man kann das DoubleBuffered aber auch nur für eine bestimmte Komponente aktivieren und nicht unbedingt gleich für die ganze Form.
Es heißt ja eigentlich Delphi-Referenz durchsuchenTWinControl.DoubleBuffered und nicht TForm.DoubleBuffered. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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